修改界面样式,修复称重停止

20260122
zhaojian 2 years ago
parent 9350679d8f
commit fa9d630b9e

@ -123,7 +123,7 @@
<Border BorderThickness="1" CornerRadius="3" BorderBrush="#404040" Background="#2F82E7" Grid.Row="5" Height="32" Margin="88,0,304,8" Width="80">
<Button Content="称 重" BorderThickness="0" FontSize="16" Foreground="White" Background="#2F82E7" Click="Button_Click_1"/>
</Border>
<Border BorderThickness="1" CornerRadius="3" BorderBrush="#404040" Background="#2F82E7" Grid.Row="5" Height="32" Margin="200,-5,1,1" Width="80">
<Border BorderThickness="1" CornerRadius="3" Visibility="Hidden" BorderBrush="#404040" Background="#2F82E7" Grid.Row="5" Height="32" Margin="200,-5,1,1" Width="80">
<Button Content="去皮" BorderThickness="0" FontSize="16" Foreground="White" Background="#2F82E7"/>
</Border>
</Grid>
@ -137,10 +137,7 @@
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="FontSize" Value="18"/>
</Style>
<!-- 内容居中样式 -->
<Style TargetType="DataGridCell" >
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Style TargetType="DataGridCell">
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="BorderThickness" Value="0"/>
@ -148,17 +145,26 @@
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<!--<DataGridTextColumn Binding="{Binding RowNumber}" Width="*" IsReadOnly="True" Header="序号" />-->
<DataGridTextColumn Binding="{Binding material_name}" Width="0.8*" IsReadOnly="True" Header="重量(g)">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Binding="{Binding material_name}" Width="0.8*" IsReadOnly="True" Header="重量(g)" />
<DataGridTemplateColumn Width="0.2*" Header="操作">
<DataGridTemplateColumn Width="0.2*" Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="删除" Click="DeleteButton_Click" Height="35" Width="60" Background="Aqua"/>
<Button Content="删除" Click="DeleteButton_Click" Height="35" Width="60" Background="Aqua"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
@ -210,12 +216,22 @@
</Style>
<!-- 内容居中样式 -->
<Style TargetType="DataGridCell" >
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="16"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" TextAlignment="Center" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.Resources>
<DataGrid.RowStyle>
@ -232,7 +248,7 @@
</DataGrid.RowStyle>
<DataGrid.Columns>
<!--<DataGridTextColumn Binding="{Binding RowNumber}" Width="*" IsReadOnly="True" Header="序号" />-->
<DataGridTextColumn Binding="{Binding check_name}" Width="*" IsReadOnly="True" Header="检验节点"/>
<DataGridTextColumn Binding="{Binding check_name}" Width="*" IsReadOnly="True" Header="检验节点" />
<DataGridTextColumn Binding="{Binding income_time,StringFormat='{}{0:yyyy-MM-dd HH:mm:ss}'}" IsReadOnly="True" Width="*" Header="检验日期" />
<DataGridTextColumn Binding="{Binding check_no}" Width="*" IsReadOnly="True" Header="任务编号" />
<DataGridTextColumn Binding="{Binding material_code}" Width="*" IsReadOnly="True" Header="检验物料" />

@ -5,27 +5,16 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Media.Media3D;
using System.Windows.Shapes;
using System.Windows.Threading;
using XGL.Dats.DBServiceFinishProd;
using XGL.Models;
using XGL.Models.Model.OrderPrepare;
using System.Text.RegularExpressions;
using System.Configuration;
using CommonFunc;
namespace XGLFinishPro.Views
{
@ -34,7 +23,7 @@ namespace XGLFinishPro.Views
/// </summary>
public partial class weighWindows : UserControl
{
Dispatcher dispatcher;
Dispatcher dispatcher ;
FinishProdDBService userDbWareHouse = new FinishProdDBService();
static SerialPort serialPort;
public CheckTaskModel checkTaskModel = new CheckTaskModel();//当前选择的任务
@ -50,17 +39,24 @@ namespace XGLFinishPro.Views
/// <param name="e"></param>
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
var dataTable = userDbWareHouse.WeighingTask("");
try
{
var dataTable = userDbWareHouse.WeighingTask("");
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
}
else
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
}
}
else
catch (Exception ex)
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
LogHelper.instance.log.Error("初始化发生异常:" + ex.Message);
}
}
/// <summary>
@ -85,7 +81,6 @@ namespace XGLFinishPro.Views
}
Button_Click_2(null, null);
}
/// <summary>
/// 称重
/// </summary>
@ -93,95 +88,101 @@ namespace XGLFinishPro.Views
/// <param name="e"></param>
private void Button_Click_1(object sender, RoutedEventArgs e)
{
if (jianyanwuliao.Text.IsNullOrEmpty() || jianyanjiedian.Text.IsNullOrEmpty() || renwubianhao.Text.IsNullOrEmpty() || guizemingcheng.Text.IsNullOrEmpty())
{
MessageBox.Show("数据不完整,无法称重!!");
}
else
{
// 获取当前应用程序的Dispatcher
dispatcher = Application.Current.Dispatcher;
// 创建一个新的SerialPort实例
serialPort = new SerialPort();
string portName = ConfigurationManager.AppSettings["weigh"];
if (!string.IsNullOrEmpty(portName))
{
serialPort.PortName = portName;
}
// 设置串口号和波特率
//serialPort.PortName = "COM12"; // 串口号根据实际情况设置
serialPort.BaudRate = 9600; // 波特率根据实际情况设置
// 设置其他串口参数,如数据位、校验位等
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
try
{
serialPort.Open();
Console.WriteLine("串口已打开");
lianjiezhuangtai.Text = "已连接";
serialPort.Write(new byte[] { 0x1B, (byte)Signal.Print }, 0, 2);
Task.Run(() => ReadDataInBackground());
}
catch (Exception ex)
{
Console.WriteLine("打开串口时出错:" + ex.Message);
}
Console.ReadLine(); // 阻塞主线程,保持程序运行
}
void ReadDataInBackground()
try
{
try
if (jianyanwuliao.Text.IsNullOrEmpty() || jianyanjiedian.Text.IsNullOrEmpty() || renwubianhao.Text.IsNullOrEmpty() || guizemingcheng.Text.IsNullOrEmpty())
{
while (true)
MessageBox.Show("数据不完整,无法称重!!");
}
else
{
// 获取当前应用程序的Dispatcher
dispatcher = Application.Current.Dispatcher;
// 创建一个新的SerialPort实例
serialPort = new SerialPort();
string portName = ConfigurationManager.AppSettings["weigh"];
if (!string.IsNullOrEmpty(portName))
{
string data = serialPort.ReadExisting();
Thread.Sleep(200);
if (!string.IsNullOrEmpty(data))
{
serialPort.PortName = portName;
}
// 设置串口号和波特率
//serialPort.PortName = "COM12"; // 串口号根据实际情况设置
serialPort.BaudRate = 9600; // 波特率根据实际情况设置
Match match1 = Regex.Match(data, @"(\d+\.\d+)");
string bb = match1.Groups[1].Value;
upDateDate(bb);
UpdateUI(bb);
break; // 读到数据后跳出循环
// 设置其他串口参数,如数据位、校验位等
serialPort.DataBits = 8;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
try
{
serialPort.Open();
Console.WriteLine("串口已打开");
lianjiezhuangtai.Text = "已连接";
serialPort.Write(new byte[] { 0x1B, (byte)Signal.Print }, 0, 2);
Task.Run(() => ReadDataInBackground());
}
catch (Exception ex)
{
Console.WriteLine("打开串口时出错:" + ex.Message);
}
Console.ReadLine(); // 阻塞主线程,保持程序运行
}
void ReadDataInBackground()
{
try
{
while (true)
{
string data = serialPort.ReadExisting();
Thread.Sleep(200);
if (!string.IsNullOrEmpty(data))
{
Match match1 = Regex.Match(data, @"(\d+\.\d+)");
string bb = match1.Groups[1].Value;
upDateDate(bb);
UpdateUI(bb);
break; // 读到数据后跳出循环
}
}
}
}
catch (Exception ex)
{
Console.WriteLine("读取串口数据时出错:" + ex.Message);
}
finally
{
ClosePort();
}
}
void UpdateUI(string data)
{
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
{
// 更新UI控件
zhongliang.Text = data;
});
}
void ClosePort()
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
Console.WriteLine("串口已关闭");
Dispatcher.Invoke(() =>
catch (Exception ex)
{
lianjiezhuangtai.Text = "未连接";
Console.WriteLine("读取串口数据时出错:" + ex.Message);
}
finally
{
ClosePort();
}
}
void UpdateUI(string data)
{
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
{
// 更新UI控件
zhongliang.Text = data;
});
}
void ClosePort()
{
if (serialPort != null && serialPort.IsOpen)
{
serialPort.Close();
Console.WriteLine("串口已关闭");
Dispatcher.Invoke(() =>
{
lianjiezhuangtai.Text = "未连接";
});
}
}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("称重发生异常:" + ex.Message);
}
}
/// <summary>
@ -190,26 +191,35 @@ namespace XGLFinishPro.Views
/// <param name="Date"></param>
public void upDateDate(string Date)
{
// 将数据保存
CheckTaskModel newItem = new CheckTaskModel() { material_name = Date };
Dispatcher.Invoke(() =>
try
{
zhongDate.Items.Add(newItem);
});
if (string.IsNullOrEmpty(checkTaskModel.actual_value))
{
checkTaskModel.actual_value = $"[\"{Date}\"]";
}
else
{
// 去除字符串开头和结尾的方括号
checkTaskModel.actual_value = checkTaskModel.actual_value.Trim(']');
// 将数据保存
CheckTaskModel newItem = new CheckTaskModel() { material_name = Date };
// 获取当前应用程序的Dispatcher
dispatcher = Application.Current.Dispatcher;
Dispatcher.Invoke(() =>
{
zhongDate.Items.Add(newItem);
});
if (string.IsNullOrEmpty(checkTaskModel.actual_value))
{
checkTaskModel.actual_value = $"[\"{Date}\"]";
}
else
{
// 去除字符串开头和结尾的方括号
checkTaskModel.actual_value = checkTaskModel.actual_value.Trim(']');
// 在字符串末尾添加逗号和aaa的值
checkTaskModel.actual_value += $", \"{Date}\"]";
// 在字符串末尾添加逗号和aaa的值
checkTaskModel.actual_value += $", \"{Date}\"]";
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);//保存称重数据
Button_Click_2(null, null);
}
catch (Exception ex)
{
LogHelper.instance.log.Error("称重更新数据库发生异常:" + ex.Message);
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);//保存称重数据
Button_Click_2(null, null);
}
/// <summary>
/// 查询数据
@ -219,41 +229,48 @@ namespace XGLFinishPro.Views
private void Button_Click_2(object sender, RoutedEventArgs e)
{
string wher = "";
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
try
{
// 更新UI控件
if (!renwubianhao1.Text.IsNullOrEmpty())
// 获取当前应用程序的Dispatcher
dispatcher = Application.Current.Dispatcher;
// 使用Dispatcher.Invoke确保在UI线程上执行更新操作
dispatcher.Invoke(() =>
{
wher += " and qct.check_no LIKE '%" + renwubianhao1.Text + "%'";
}
if (!jianyanjiedian1.Text.IsNullOrEmpty())
{
wher += " and qt.check_name LIKE '%" + jianyanjiedian1.Text + "%'";
}
if (!jianyanwuliao1.Text.IsNullOrEmpty())
{
wher += " and qct.material_name LIKE '%" + jianyanwuliao1.Text + "%'";
}
if (!dateStart.Text.IsNullOrEmpty())
{
wher += " and qct.income_time='" + dateStart.Text + "'";
}
var dataTable = userDbWareHouse.WeighingTask(wher);
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = null;
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
}
else
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
}
});
// 更新UI控件
if (!renwubianhao1.Text.IsNullOrEmpty())
{
wher += " and qct.check_no LIKE '%" + renwubianhao1.Text + "%'";
}
if (!jianyanjiedian1.Text.IsNullOrEmpty())
{
wher += " and qt.check_name LIKE '%" + jianyanjiedian1.Text + "%'";
}
if (!jianyanwuliao1.Text.IsNullOrEmpty())
{
wher += " and qct.material_name LIKE '%" + jianyanwuliao1.Text + "%'";
}
if (!dateStart.Text.IsNullOrEmpty())
{
wher += " and qct.income_time='" + dateStart.Text + "'";
}
var dataTable = userDbWareHouse.WeighingTask(wher);
if (dataTable != null && dataTable.Rows.Count > 0)
{
// 绑定 DataTable 到 DataGrid
WeighingTaskDateTable.ItemsSource = null;
WeighingTaskDateTable.ItemsSource = dataTable.DefaultView;
}
else
{
// 清空 DataGrid
WeighingTaskDateTable.ItemsSource = null;
}
});
}
catch (Exception ex)
{
LogHelper.instance.log.Error("查询数据发生异常:" + ex.Message);
}
}
/// <summary>
/// 表格双击事件
@ -262,49 +279,55 @@ namespace XGLFinishPro.Views
/// <param name="e"></param>
private void DataGrid_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// 获取选中行的索引
int selectedIndex = WeighingTaskDateTable.SelectedIndex;
if (zhongDate.Items.Count != 0)
try
{
zhongDate.Items.Clear();
zhongDate.ItemsSource = null;
}
// 检查是否选中了行
if (selectedIndex >= 0 && selectedIndex < WeighingTaskDateTable.Items.Count)
{
// 获取选中行的数据项
var selectedRow = WeighingTaskDateTable.Items[selectedIndex] as DataRowView;
// 将选中行的数据项赋给控件
jianyanwuliao.Text = selectedRow["material_name"].ToString();
jianyanjiedian.Text = selectedRow["check_name"].ToString();
renwubianhao.Text = selectedRow["check_no"].ToString();
guizemingcheng.Text = selectedRow["rule_name"].ToString();
checkTaskModel.check_name = selectedRow["check_name"].ToString();
checkTaskModel.material_name = selectedRow["material_name"].ToString();
checkTaskModel.check_no = selectedRow["check_no"].ToString();
checkTaskModel.rule_name = selectedRow["rule_name"].ToString();
checkTaskModel.material_code = selectedRow["material_code"].ToString();
checkTaskModel.record_id = selectedRow["record_id"].ToString();
checkTaskModel.actual_value = selectedRow["actual_value"].ToString();
if (!selectedRow["actual_value"].ToString().IsNullOrEmpty())
// 获取选中行的索引
int selectedIndex = WeighingTaskDateTable.SelectedIndex;
if (zhongDate.Items.Count != 0)
{
List<string> stringList = JsonConvert.DeserializeObject<List<string>>(selectedRow["actual_value"].ToString());
if (stringList.Count != 0)
zhongDate.Items.Clear();
zhongDate.ItemsSource = null;
}
// 检查是否选中了行
if (selectedIndex >= 0 && selectedIndex < WeighingTaskDateTable.Items.Count)
{
// 获取选中行的数据项
var selectedRow = WeighingTaskDateTable.Items[selectedIndex] as DataRowView;
// 将选中行的数据项赋给控件
jianyanwuliao.Text = selectedRow["material_name"].ToString();
jianyanjiedian.Text = selectedRow["check_name"].ToString();
renwubianhao.Text = selectedRow["check_no"].ToString();
guizemingcheng.Text = selectedRow["rule_name"].ToString();
checkTaskModel.check_name = selectedRow["check_name"].ToString();
checkTaskModel.material_name = selectedRow["material_name"].ToString();
checkTaskModel.check_no = selectedRow["check_no"].ToString();
checkTaskModel.rule_name = selectedRow["rule_name"].ToString();
checkTaskModel.material_code = selectedRow["material_code"].ToString();
checkTaskModel.record_id = selectedRow["record_id"].ToString();
checkTaskModel.actual_value = selectedRow["actual_value"].ToString();
if (!selectedRow["actual_value"].ToString().IsNullOrEmpty())
{
//List<CheckTaskModel> materialList = new List<CheckTaskModel>();
foreach (var item in stringList)
List<string> stringList = JsonConvert.DeserializeObject<List<string>>(selectedRow["actual_value"].ToString());
if (stringList.Count != 0)
{
//materialList.Add(new CheckTaskModel { material_name = item });
zhongDate.Items.Add(new CheckTaskModel { material_name = item });
//List<CheckTaskModel> materialList = new List<CheckTaskModel>();
foreach (var item in stringList)
{
//materialList.Add(new CheckTaskModel { material_name = item });
zhongDate.Items.Add(new CheckTaskModel { material_name = item });
}
//zhongDate.Items.Add(materialList);
}
//zhongDate.Items.Add(materialList);
}
}
}
catch (Exception ex)
{
LogHelper.instance.log.Error("表格双击事件发生异常:" + ex.Message);
}
}
/// <summary>
/// 表格删除按钮
@ -313,22 +336,29 @@ namespace XGLFinishPro.Views
/// <param name="e"></param>
private void DeleteButton_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
var dataContext = button?.DataContext;
if (dataContext != null && dataContext is CheckTaskModel)
try
{
var item = (CheckTaskModel)dataContext;
string materialName = item.material_name;
// 从 DataGrid 的 ItemsSource 中移除该项
zhongDate.Items.Remove(item); // 从 actual_value 中移除 materialName
checkTaskModel.actual_value = RemoveMaterialNameFromActualValue(checkTaskModel.actual_value, materialName);
if (checkTaskModel.actual_value=="[]")
var button = sender as Button;
var dataContext = button?.DataContext;
if (dataContext != null && dataContext is CheckTaskModel)
{
checkTaskModel.actual_value = null;
var item = (CheckTaskModel)dataContext;
string materialName = item.material_name;
// 从 DataGrid 的 ItemsSource 中移除该项
zhongDate.Items.Remove(item); // 从 actual_value 中移除 materialName
checkTaskModel.actual_value = RemoveMaterialNameFromActualValue(checkTaskModel.actual_value, materialName);
if (checkTaskModel.actual_value == "[]")
{
checkTaskModel.actual_value = null;
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);
Button_Click_2(null, null);
// 从数据源中移除该项
}
userDbWareHouse.InsertCheckTaskDetail(checkTaskModel.actual_value, checkTaskModel.record_id);
Button_Click_2(null, null);
// 从数据源中移除该项
}
catch (Exception ex)
{
LogHelper.instance.log.Error(" 表格删除按钮发生异常:" + ex.Message);
}
}
private string RemoveMaterialNameFromActualValue(string actualValue, string materialName)
@ -341,7 +371,6 @@ namespace XGLFinishPro.Views
private void pickerstart_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
}
}
public class motre

@ -2,5 +2,12 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory />
<InstallUrlHistory />
<SupportUrlHistory />
<UpdateUrlHistory />
<BootstrapperUrlHistory />
<ErrorReportUrlHistory />
<FallbackCulture>zh-CN</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
</PropertyGroup>
</Project>
Loading…
Cancel
Save