This commit is contained in:
xyy
2026-02-09 19:13:20 +08:00
parent a04d135700
commit 5ba82c390d
7 changed files with 546 additions and 81 deletions

View File

@@ -15,6 +15,8 @@ namespace 材料热传导系数
{
public int Id { get; set; }
public int row { get; set; }
/// <summary>
/// 条码(保留用于兼容性)
/// </summary>
@@ -266,15 +268,73 @@ standarderror)
}
}
public List<ScanData> GetScanDataBylldh_jh(string lldh, string jh)
public List<ScanData> GetScanDataBylldh_jh(string jh)
{
using (var connection = new MySqlConnection(_connectionString))
{
connection.Open();
var sql = @"SELECT * FROM scandata
where lldh=@lldh and jh = @jh
where jh = @jh
ORDER BY id asc ";
return connection.Query<ScanData>(sql, new { @lldh, jh }).ToList();
return connection.Query<ScanData>(sql, new { jh }).ToList();
}
}
/// <summary>
/// 更新扫描数据
/// </summary>
/// <param name="scanData">要更新的扫描数据</param>
public void UpdateScanItem(ScanData scanData)
{
using (var connection = new MySqlConnection(_connectionString))
{
connection.Open();
var sql = @"UPDATE scandata SET
barcode = @barcode,
diffpressure = @diffpressure,
exit_temperature = @exit_temperature,
temperature = @temperature,
dwelltime = @dwelltime,
TemperatureMode = @TemperatureMode,
kzh = @kzh,
lldh = @lldh,
jh = @jh,
quantity = @quantity,
pressuresetting = @pressuresetting,
standarderror = @standarderror
WHERE id = @Id";
connection.Execute(sql, new
{
scanData.barcode,
scanData.diffpressure,
scanData.exit_temperature,
scanData.temperature,
scanData.dwelltime,
scanData.TemperatureMode,
scanData.kzh,
scanData.lldh,
scanData.jh,
scanData.quantity,
scanData.pressuresetting,
scanData.standarderror,
scanData.Id
});
}
}
/// <summary>
/// 根据ID获取扫描数据
/// </summary>
/// <param name="id">数据ID</param>
/// <returns>扫描数据对象</returns>
public ScanData GetScanDataById(int id)
{
using (var connection = new MySqlConnection(_connectionString))
{
connection.Open();
var sql = @"SELECT * FROM scandata WHERE id = @id";
return connection.QueryFirstOrDefault<ScanData>(sql, new { id });
}
}
@@ -293,5 +353,53 @@ standarderror)
return false;
}
}
/// <summary>
/// 根据ID获取测试数据
/// </summary>
public ConductivityTestData GetTestDataById(int id)
{
using (var connection = new MySqlConnection(_connectionString))
{
connection.Open();
var sql = @"SELECT * FROM normaltemperature WHERE id = @id";
return connection.QueryFirstOrDefault<ConductivityTestData>(sql, new { id });
}
}
/// <summary>
/// 更新测试数据
/// </summary>
public void UpdateTestData(ConductivityTestData testData)
{
using (var connection = new MySqlConnection(_connectionString))
{
connection.Open();
var sql = @"UPDATE normaltemperature SET
barcode = @barcode,
temperature = @temperature,
startpressure = @startpressure,
dwelltime = @dwelltime,
diffpressure = @diffpressure,
endpressure = @endpressure,
type = @type,
kzh = @kzh,
starttime = @starttime,
endtime = @endtime,
lldh = @lldh,
jh = @jh,
quantity = @quantity,
standarderror = @standarderror,
testresult = @testresult
WHERE id = @Id";
connection.Execute(sql, testData);
}
}
}
}

View File

@@ -77,7 +77,7 @@ namespace 全自动水压检测仪
{
int maxRetries = 3;
int retryCount = 0;
while (retryCount < maxRetries)
{
try
@@ -106,7 +106,7 @@ namespace 全自动水压检测仪
// 如果读取失败默认写入true开启状态
System.Diagnostics.Debug.WriteLine($"[Function] 读取地址{address}失败,使用默认值: {readEx.Message}");
}
// 写入相反的状态
modbusMaster.WriteSingleCoil(1, address, !currentState);
Thread.Sleep(100);
@@ -122,7 +122,7 @@ namespace 全自动水压检测仪
default:
break;
}
// 操作成功,退出重试循环
return;
}
@@ -130,13 +130,13 @@ namespace 全自动水压检测仪
{
retryCount++;
System.Diagnostics.Debug.WriteLine($"[Function] Modbus从站异常 (尝试 {retryCount}/{maxRetries}): {slaveEx.Message}");
if (retryCount >= maxRetries)
{
MessageBox.Show($"操作失败!\n\nModbus从站错误: {slaveEx.SlaveExceptionCode}\n{slaveEx.Message}", "错误");
return;
}
// 等待后重试
Thread.Sleep(200);
}
@@ -144,13 +144,13 @@ namespace 全自动水压检测仪
{
retryCount++;
System.Diagnostics.Debug.WriteLine($"[Function] 操作失败 (尝试 {retryCount}/{maxRetries}): {ex.Message}");
if (retryCount >= maxRetries)
{
MessageBox.Show("操作失败!" + "\n" + "\n" + ex.Message, "错误");
return;
}
// 等待后重试
Thread.Sleep(200);
}
@@ -190,7 +190,7 @@ namespace 全自动水压检测仪
}
public void WriteToPLCForNew(string inPutValue, ushort address, DataType dataType, bool isok=false,float max=0,float min=0)
public void WriteToPLCForNew(string inPutValue, ushort address, DataType dataType, bool isok = false, float max = 0, float min = 0)
{
try
{
@@ -202,7 +202,7 @@ namespace 全自动水压检测仪
if (UIInputDialog.ShowInputDoubleDialog(ref value, UIStyle.Inherited, desc: "请输入值", showMask: false))
{
if ( isok&&value > max || value < min)
if (isok && value > max || value < min)
{
MessageBox.Show("数据不正确");
return;
@@ -212,9 +212,13 @@ namespace 全自动水压检测仪
break;
case DataType.:
int value_int = inPutValue.ToInt();
if (UIInputDialog.ShowInputIntegerDialog(ref value_int, UIStyle.Inherited, desc: "请输入数据:"))
{
if (isok)
{
value_int = value_int * 10;
}
modbusMaster.WriteMultipleRegisters(1, address, dc.intToushorts(value_int));
//if (isok)
//{ modbusMaster.WriteSingleCoil(1, 25, true); }

View File

@@ -171,6 +171,8 @@ namespace 全自动水压检测仪
this.uiPanel2 = new Sunny.UI.UIPanel();
this.uiLabel1 = new Sunny.UI.UILabel();
this.uiLight1 = new Sunny.UI.UILight();
this.uiLabel26 = new Sunny.UI.UILabel();
this.uiTextBox14 = new Sunny.UI.UITextBox();
this.uiTableLayoutPanel1.SuspendLayout();
this.uiPanel1.SuspendLayout();
this.uiPanel4.SuspendLayout();
@@ -1448,6 +1450,8 @@ namespace 全自动水压检测仪
//
// uiPanel14
//
this.uiPanel14.Controls.Add(this.uiLabel26);
this.uiPanel14.Controls.Add(this.uiTextBox14);
this.uiPanel14.Controls.Add(this.uiLabel25);
this.uiPanel14.Controls.Add(this.uiTextBox13);
this.uiPanel14.Controls.Add(this.uiLabel24);
@@ -1630,6 +1634,7 @@ namespace 全自动水压检测仪
this.uiLabel35.TabIndex = 2;
this.uiLabel35.Text = "联络单号:";
this.uiLabel35.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.uiLabel35.Visible = false;
//
// uiLabel49
//
@@ -1668,6 +1673,7 @@ namespace 全自动水压检测仪
this.uiTextBox2.Size = new System.Drawing.Size(128, 28);
this.uiTextBox2.TabIndex = 3;
this.uiTextBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
this.uiTextBox2.Visible = false;
this.uiTextBox2.Watermark = "";
//
// uiTextBox10
@@ -2376,6 +2382,35 @@ namespace 全自动水压检测仪
this.uiLight1.TabIndex = 1;
this.uiLight1.Text = "uiLight1";
//
// uiLabel26
//
this.uiLabel26.Font = new System.Drawing.Font("微软雅黑", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.uiLabel26.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48)))));
this.uiLabel26.Location = new System.Drawing.Point(277, 135);
this.uiLabel26.Name = "uiLabel26";
this.uiLabel26.Size = new System.Drawing.Size(112, 30);
this.uiLabel26.TabIndex = 25;
this.uiLabel26.Text = "水循环时间设置:";
this.uiLabel26.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
//
// uiTextBox14
//
this.uiTextBox14.Cursor = System.Windows.Forms.Cursors.IBeam;
this.uiTextBox14.Font = new System.Drawing.Font("微软雅黑", 10.5F);
this.uiTextBox14.Location = new System.Drawing.Point(395, 134);
this.uiTextBox14.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
this.uiTextBox14.MinimumSize = new System.Drawing.Size(1, 16);
this.uiTextBox14.Name = "uiTextBox14";
this.uiTextBox14.Padding = new System.Windows.Forms.Padding(5);
this.uiTextBox14.Radius = 3;
this.uiTextBox14.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(220)))), ((int)(((byte)(220)))));
this.uiTextBox14.ShowText = false;
this.uiTextBox14.Size = new System.Drawing.Size(91, 28);
this.uiTextBox14.TabIndex = 26;
this.uiTextBox14.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter;
this.uiTextBox14.Watermark = "";
this.uiTextBox14.Click += new System.EventHandler(this.uiTextBox14_Click);
//
// NormalTemperatureMode
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -2590,6 +2625,8 @@ namespace 全自动水压检测仪
private Sunny.UI.UITextBox uiTextBox13;
private Sunny.UI.UILabel uiLabel24;
private Sunny.UI.UITextBox uiTextBox12;
private Sunny.UI.UILabel uiLabel26;
private Sunny.UI.UITextBox uiTextBox14;
}
}

View File

@@ -394,7 +394,7 @@ namespace 全自动水压检测仪
if (currentValue > settingValue)
{
isValid = false;
_modbusMaster.WriteSingleCoil(1, 10082, true);
timer?.Stop();
MessageBox.Show("实验已达到设置压差,自动停止!");
@@ -450,7 +450,7 @@ namespace 全自动水压检测仪
Real13 = SafelyReadRegisters(1, 3484, 2),// 温度保护
Real14 = SafelyReadRegisters(1, 3134, 2),// 压力保护
Real15 = SafelyReadRegisters(1, 2406, 1),// 时间
CurrentTime = DateTime.Now
};
}
@@ -617,6 +617,15 @@ namespace 全自动水压检测仪
uiTextBox13.Text = propre.ToString("F1");
}
// 压力保护
if (uiTextBox14 != null && !uiTextBox14.IsDisposed &&
modbusData.Real15 != null && modbusData.Real15.Length >= 2)
{
var propre = modbusData.Real15[0];
uiTextBox14.Text = (propre / 10).ToString("F1");
}
}
catch (Exception uiEx)
{
@@ -1040,7 +1049,7 @@ namespace 全自动水压检测仪
}
string plcIp = "192.168.1.10";
// string plcIp = "127.0.0.1";
//string plcIp = "127.0.0.1";
bool initSuccess = Data.ModbusResourceManager.Instance.Init(plcIp, 502);
if (!initSuccess)
{
@@ -1611,14 +1620,14 @@ namespace 全自动水压检测仪
itemNumber = uiTextBox10.Text.Trim();
});
if (string.IsNullOrEmpty(contactNumber))
{
SafeInvoke(() =>
{
MessageBox.Show("请输入联络单号!");
});
return;
}
//if (string.IsNullOrEmpty(contactNumber))
//{
// SafeInvoke(() =>
// {
// MessageBox.Show("请输入联络单号!");
// });
// return;
//}
if (string.IsNullOrEmpty(itemNumber))
{
@@ -1635,14 +1644,14 @@ namespace 全自动水压检测仪
// 2. 从数据库查询数据
ScanData scanData = GetScanDataByBarcode(lldh, jh);
ScanData scanData = GetScanDataByBarcode(jh);
if (scanData == null)
{
SafeInvoke(() =>
{
MessageBox.Show($"未找到联络单号 {contactNumber} 和件号 {itemNumber} 的记录!");
MessageBox.Show($"未找到件号 {itemNumber} 的记录!");
});
return;
}
@@ -1676,17 +1685,17 @@ namespace 全自动水压检测仪
}
private ScanData GetScanDataByBarcode(string lldh, string jh)
private ScanData GetScanDataByBarcode(string jh)
{
using (var connection = new MySqlConnection(_repository._connectionString))
{
connection.Open();
var sql = @"SELECT * FROM scandata
WHERE lldh = @lldh and jh = @jh
WHERE jh = @jh
ORDER BY CreateTime DESC
LIMIT 1";
return connection.QueryFirstOrDefault<ScanData>(sql, new { lldh, jh });
return connection.QueryFirstOrDefault<ScanData>(sql, new { jh });
}
}
@@ -1937,5 +1946,14 @@ namespace 全自动水压检测仪
ma?.WriteToPLCForNew(uiTextBox13.Text.Trim(), 3134, Function.DataType.);
});
}
private void uiTextBox14_Click(object sender, EventArgs e)
{
SafeInvoke(() =>
{
ma?.WriteToPLCForNew(uiTextBox14.Text.Trim(), 2406, Function.DataType., isok: true);
});
}
}
}

View File

@@ -119,12 +119,38 @@ namespace 全自动水压检测仪
{
dataGridView.Columns.Clear();
dataGridView.ScrollBars = ScrollBars.Both;
// ============ 添加编辑按钮列(放在第一列) ============
DataGridViewButtonColumn editColumn = new DataGridViewButtonColumn
{
Name = "EditColumn",
HeaderText = "操作",
Text = "保存",
UseColumnTextForButtonValue = true,
Width = 60,
SortMode = DataGridViewColumnSortMode.NotSortable,
DefaultCellStyle = { Alignment = DataGridViewContentAlignment.MiddleCenter }
};
dataGridView.Columns.Add(editColumn);
dataGridView.Columns.Add(new DataGridViewTextBoxColumn
{
Name = "Id",
HeaderText = "编号",
Width = 50,
DataPropertyName = "Id", // 绑定到ConductivityTestData的Id属性
DataPropertyName = "Id",
SortMode = DataGridViewColumnSortMode.NotSortable,
DefaultCellStyle = { Alignment = DataGridViewContentAlignment.MiddleCenter }
});
dataGridView.Columns.Add(new DataGridViewTextBoxColumn
{
Name = "Id",
HeaderText = "序号",
Width = 50,
DataPropertyName = "row", // 绑定到ConductivityTestData的Id属性
SortMode = DataGridViewColumnSortMode.NotSortable,
DefaultCellStyle = { Alignment = DataGridViewContentAlignment.MiddleCenter }
});
@@ -469,21 +495,66 @@ namespace 全自动水压检测仪
}
}
//private void Report_Load(object sender, EventArgs e)
//{
// // 检查数据源
// //if (CurrentReport == null || CurrentReport.Count == 0)
// //{
// // MessageBox.Show("没有测试数据可显示", "提示",
// // MessageBoxButtons.OK, MessageBoxIcon.Information);
// // return;
// //}
// try
// {
// dataGridView.CellFormatting += DataGridView_CellFormatting;
// var result = _repository.GetTestData();
// if (result != null && result.Count > 0)
// {
// CurrentReport = result;
// }
// int i = 0;
// CurrentReport.ForEach(x =>
// {
// i++;
// x.Id = i;
// });
// dataGridView.DataSource = CurrentReport;
// // 刷新显示
// dataGridView.Refresh();
// this.Text = $"测试数据报表(共{CurrentReport.Count}条记录)";
// }
// catch (Exception ex)
// {
// MessageBox.Show($"加载数据失败:{ex.Message}", "错误",
// MessageBoxButtons.OK, MessageBoxIcon.Error);
// }
//}
private void Report_Load(object sender, EventArgs e)
{
// 检查数据源
//if (CurrentReport == null || CurrentReport.Count == 0)
//{
// MessageBox.Show("没有测试数据可显示", "提示",
// MessageBoxButtons.OK, MessageBoxIcon.Information);
// return;
//}
try
{
dataGridView.CellFormatting += DataGridView_CellFormatting;
// ============ 启用DataGridView编辑功能 ============
dataGridView.ReadOnly = false;
dataGridView.AllowUserToAddRows = false;
dataGridView.EditMode = DataGridViewEditMode.EditOnEnter;
// 确保除了Id列和编辑按钮列外都可编辑
foreach (DataGridViewColumn column in dataGridView.Columns)
{
if (column.Name != "Id" && column.Name != "EditColumn")
{
column.ReadOnly = false;
}
}
// ============ 结束设置 ============
var result = _repository.GetTestData();
if (result != null && result.Count > 0)
@@ -494,7 +565,7 @@ namespace 全自动水压检测仪
CurrentReport.ForEach(x =>
{
i++;
x.Id = i;
x.row = i;
});
dataGridView.DataSource = CurrentReport;
@@ -502,6 +573,11 @@ namespace 全自动水压检测仪
dataGridView.Refresh();
this.Text = $"测试数据报表(共{CurrentReport.Count}条记录)";
// ============ 添加编辑按钮点击事件 ============
dataGridView.CellClick -= DataGridViewCellClickHandler; // 先移除避免重复
dataGridView.CellClick += DataGridViewCellClickHandler;
// ============ 结束添加 ============
}
catch (Exception ex)
{
@@ -510,8 +586,99 @@ namespace 全自动水压检测仪
}
}
// 编辑按钮点击事件处理
private void DataGridViewCellClickHandler(object sender, DataGridViewCellEventArgs e)
{
// 确保点击的是编辑按钮列
if (e.RowIndex >= 0 && e.ColumnIndex >= 0 &&
dataGridView.Columns[e.ColumnIndex].Name == "EditColumn")
{
try
{
// 结束当前单元格的编辑
dataGridView.EndEdit();
// 获取当前行的数据
var row = dataGridView.Rows[e.RowIndex];
// 验证必要字段
if (row.Cells["jh"].Value == null || string.IsNullOrEmpty(row.Cells["jh"].Value.ToString()))
{
MessageBox.Show("件号不能为空!", "验证错误",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
// 从数据库获取原始数据通过Id
int id = Convert.ToInt32(row.Cells["Id"].Value);
var originalData = _repository.GetTestDataById(id);
if (originalData == null)
{
MessageBox.Show("未找到对应的测试数据!", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// 更新数据
originalData.lldh = row.Cells["lldh"].Value?.ToString() ?? "";
originalData.jh = row.Cells["jh"].Value?.ToString() ?? "";
originalData.kzh = row.Cells["kzh"].Value?.ToString() ?? "";
// 数值类型(带验证)
if (row.Cells["quantity"].Value != null && !string.IsNullOrEmpty(row.Cells["quantity"].Value.ToString()))
originalData.quantity = Convert.ToInt32(row.Cells["quantity"].Value);
if (row.Cells["startpressure"].Value != null && !string.IsNullOrEmpty(row.Cells["startpressure"].Value.ToString()))
originalData.startpressure = Convert.ToDouble(row.Cells["startpressure"].Value);
if (row.Cells["endpressure"].Value != null && !string.IsNullOrEmpty(row.Cells["endpressure"].Value.ToString()))
originalData.endpressure = Convert.ToDouble(row.Cells["endpressure"].Value);
if (row.Cells["dwelltime"].Value != null && !string.IsNullOrEmpty(row.Cells["dwelltime"].Value.ToString()))
originalData.dwelltime = Convert.ToDouble(row.Cells["dwelltime"].Value);
if (row.Cells["diffpressure"].Value != null && !string.IsNullOrEmpty(row.Cells["diffpressure"].Value.ToString()))
originalData.diffpressure = Convert.ToDouble(row.Cells["diffpressure"].Value);
if (row.Cells["temperature"].Value != null && !string.IsNullOrEmpty(row.Cells["temperature"].Value.ToString()))
originalData.temperature = Convert.ToDouble(row.Cells["temperature"].Value);
if (row.Cells["standarderror"].Value != null && !string.IsNullOrEmpty(row.Cells["standarderror"].Value.ToString()))
originalData.standarderror = Convert.ToDecimal(row.Cells["standarderror"].Value);
originalData.testresult = row.Cells["testresult"].Value?.ToString() ?? "";
// 类型转换
string typeValue = row.Cells["Type"].Value?.ToString() ?? "";
if (typeValue == "常温")
originalData.Type = 1;
else if (typeValue == "高温")
originalData.Type = 0;
// 保存到数据库
_repository.UpdateTestData(originalData);
MessageBox.Show("修改已保存!", "成功",
MessageBoxButtons.OK, MessageBoxIcon.Information);
// 刷新数据(可选)
// var result = _repository.GetTestData();
// CurrentReport = result;
// dataGridView.DataSource = CurrentReport;
}
catch (FormatException)
{
MessageBox.Show("数值格式错误,请检查输入的数据!", "格式错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch (Exception ex)
{
MessageBox.Show($"保存失败:{ex.Message}", "错误",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
/// <summary>
/// 导出报表按钮点击事件
/// </summary>
@@ -940,6 +1107,7 @@ namespace 全自动水压检测仪
{
//base.OnFormClosing(e);
dataGridView.CellFormatting -= DataGridView_CellFormatting;
dataGridView.CellClick -= DataGridViewCellClickHandler; // 移除事件
}
}
}

View File

@@ -196,6 +196,7 @@
this.uiTextBox2.Style = Sunny.UI.UIStyle.Custom;
this.uiTextBox2.TabIndex = 12;
this.uiTextBox2.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft;
this.uiTextBox2.Visible = false;
this.uiTextBox2.Watermark = "请输入联络单号";
//
// uiTextBox11
@@ -259,6 +260,7 @@
this.uiLabel50.TabIndex = 31;
this.uiLabel50.Text = "联络单号:";
this.uiLabel50.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.uiLabel50.Visible = false;
//
// uiLabel51
//
@@ -675,6 +677,7 @@
this.ColumnContactNumber.MinimumWidth = 6;
this.ColumnContactNumber.Name = "ColumnContactNumber";
this.ColumnContactNumber.ReadOnly = true;
this.ColumnContactNumber.Visible = false;
this.ColumnContactNumber.Width = 150;
//
// ColumnItemNumber

View File

@@ -89,11 +89,11 @@ namespace 全自动水压检测仪
string itemNumber = uiTextBox11?.Text?.Trim() ?? "";
string engravingNumber = uiTextBoxEngravingNumber?.Text?.Trim() ?? "";
if (string.IsNullOrEmpty(contactNumber))
{
MessageBox.Show("请输入联络单号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
//if (string.IsNullOrEmpty(contactNumber))
//{
// MessageBox.Show("请输入联络单号!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
// return;
//}
if (string.IsNullOrEmpty(itemNumber))
{
@@ -106,10 +106,10 @@ namespace 全自动水压检测仪
bool isAny = _repository.GetScanDataBylldh_jh(uiTextBox2.Text, uiTextBox11.Text).Any();
bool isAny = _repository.GetScanDataBylldh_jh(uiTextBox11.Text).Any();
if (isAny)
{
MessageBox.Show("联络单号-件号重复");
MessageBox.Show("件号重复");
return;
}
try
@@ -189,46 +189,46 @@ namespace 全自动水压检测仪
}
});
}
private void LoadData()
{
try
{
// 将数据查询操作移到后台线程避免UI卡顿
System.Threading.Tasks.Task.Run(() =>
{
var data = _repository.GetScanData();
//private void LoadData()
//{
// try
// {
// // 将数据查询操作移到后台线程避免UI卡顿
// System.Threading.Tasks.Task.Run(() =>
// {
// var data = _repository.GetScanData();
// 安全更新DataGridView
SafeInvoke(() =>
{
// 避免重复绑定导致的异常
if (uiDataGridView1 != null && !uiDataGridView1.IsDisposed)
{
// 先解绑再重新绑定
uiDataGridView1.DataSource = new List<ScanData>();
uiDataGridView1.DataSource = data;
// // 安全更新DataGridView
// SafeInvoke(() =>
// {
// // 避免重复绑定导致的异常
// if (uiDataGridView1 != null && !uiDataGridView1.IsDisposed)
// {
// // 先解绑再重新绑定
// uiDataGridView1.DataSource = new List<ScanData>();
// uiDataGridView1.DataSource = data;
if (uiDataGridView1.Columns.Contains("Column1"))
{
uiDataGridView1.Columns["Column1"].Visible = false;
}
// if (uiDataGridView1.Columns.Contains("Column1"))
// {
// uiDataGridView1.Columns["Column1"].Visible = false;
// }
SetRowNumbers();
uiDataGridView1.Refresh();
// SetRowNumbers();
// uiDataGridView1.Refresh();
}
});
});
}
catch (Exception ex)
{
SafeInvoke(() =>
{
MessageBox.Show($"加载数据失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
});
}
}
// }
// });
// });
// }
// catch (Exception ex)
// {
// SafeInvoke(() =>
// {
// MessageBox.Show($"加载数据失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
// });
// }
//}
//private void SwitchWindow<T>(ref T windowInstance, Func<T> createFunc) where T : UIForm
//{
@@ -252,7 +252,134 @@ namespace 全自动水压检测仪
// this.Hide();
// windowInstance.Show();
//}
private void LoadData()
{
try
{
// 将数据查询操作移到后台线程避免UI卡顿
System.Threading.Tasks.Task.Run(() =>
{
var data = _repository.GetScanData();
// 安全更新DataGridView
SafeInvoke(() =>
{
// 避免重复绑定导致的异常
if (uiDataGridView1 != null && !uiDataGridView1.IsDisposed)
{
// ============ 启用编辑功能 ============
// 关键设置:允许用户编辑
uiDataGridView1.ReadOnly = false;
uiDataGridView1.AllowUserToAddRows = false;
uiDataGridView1.AllowUserToDeleteRows = false;
uiDataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; // 或 EditOnKeystrokeOrF2
// ============ 结束设置 ============
// 先解绑再重新绑定
uiDataGridView1.DataSource = new List<ScanData>();
uiDataGridView1.DataSource = data;
// ============ 添加编辑按钮列 ============
// 检查是否已存在编辑按钮列
if (!uiDataGridView1.Columns.Contains("EditButton"))
{
DataGridViewButtonColumn editButtonColumn = new DataGridViewButtonColumn();
editButtonColumn.Name = "EditButton";
editButtonColumn.HeaderText = "保存修改";
editButtonColumn.Text = "保存";
editButtonColumn.UseColumnTextForButtonValue = true;
editButtonColumn.Width = 80;
// 将按钮列添加到DataGridView中放在第一列
uiDataGridView1.Columns.Add(editButtonColumn);
uiDataGridView1.Columns["EditButton"].DisplayIndex = 0; // 放在第一列
}
// ============ 设置各列属性,使数据可编辑 ============
// 确保所有列都可编辑除了Id列和按钮列
foreach (DataGridViewColumn column in uiDataGridView1.Columns)
{
if (column.Name != "Id" && column.Name != "EditButton")
{
column.ReadOnly = false;
// 特别设置数值列的编辑属性
if (column.Name.Contains("pressure") ||
column.Name.Contains("temperature") ||
column.Name.Contains("dwelltime") ||
column.Name.Contains("quantity") ||
column.Name.Contains("standarderror"))
{
// 设置单元格为文本框,可以编辑数值
if (column is DataGridViewTextBoxColumn textBoxColumn)
{
textBoxColumn.DefaultCellStyle.Format = "F2"; // 显示两位小数
}
}
}
}
// 隐藏ID列如果需要
if (uiDataGridView1.Columns.Contains("Id"))
{
uiDataGridView1.Columns["Id"].Visible = false;
}
// ============ 添加按钮点击事件处理 ============
// 移除旧的事件处理程序(避免重复)
uiDataGridView1.CellClick -= DataGridViewCellClickHandler;
// 添加新的事件处理程序
uiDataGridView1.CellClick += DataGridViewCellClickHandler;
// ============ 结束添加 ============
SetRowNumbers();
uiDataGridView1.Refresh();
}
});
});
}
catch (Exception ex)
{
SafeInvoke(() =>
{
MessageBox.Show($"加载数据失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
});
}
}
// 编辑按钮点击事件处理
private void DataGridViewCellClickHandler(object sender, DataGridViewCellEventArgs e)
{
// 确保点击的是按钮列
if (e.RowIndex >= 0 && e.ColumnIndex >= 0 &&
uiDataGridView1.Columns[e.ColumnIndex].Name == "EditButton")
{
// 获取选中的行数据
if (uiDataGridView1.Rows[e.RowIndex].DataBoundItem is ScanData scanData)
{
// 保存修改到数据库
try
{
bool isAny = _repository.GetScanDataBylldh_jh(scanData.jh).Any();
if (isAny)
{
MessageBox.Show("件号重复");
return;
}
_repository.UpdateScanItem(scanData);
MessageBox.Show("修改已保存!", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);
// 刷新数据
LoadData();
}
catch (Exception ex)
{
MessageBox.Show($"保存失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void SwitchWindow<T>(T windowInstance, Func<T> createFunc) where T : UIForm
{