using CnasSynchronusClient; using CnasSynchrousModel; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace CNAS_BalanceClient { public class CrucibleUIOperation { /// /// 将天平端传输过来的重量传输到坩埚数据中 /// /// /// /// /// /// public void UpdateCrucibleBalanceWeight(Dictionary DstCurrentLeftGrids, DataGridView dgvCrucibleShelf, double defaultdouble, string currentCrucibleDataType, List laboratoryTests) { //当前坩埚架选中单元格 if (dgvCrucibleShelf.CurrentCell == null) return; if (dgvCrucibleShelf.CurrentCell.ColumnIndex != 3) return; //索引为3的列为“重量”列,其他列不允许插入数值 //是否满足称重范围 double MinValue = 0; double MaxValue = 0; switch (currentCrucibleDataType) { case "Crucible|Heat": MinValue = 0.9; MaxValue = 1.1; break; case "Crucible|Sulfur": MinValue = 0.045; MaxValue = 0.055; break; case "Crucible|Hydrogen": MinValue = 0.05; MaxValue = 0.2; break; } if (defaultdouble > MaxValue || defaultdouble < MinValue) { MessageBox.Show($"称重范围是{MinValue}g~{MaxValue}g.", "提示"); return; } if (dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value == null || dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString() == "") { //此时说明datagridview中没有旧值,不存在覆盖问题,可以直接增加数据 string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DstCurrentLeftGrids); if (strSampleCode == "") return; //此时未获得左侧样品编号,不能在右侧增加数据 string strCrucibleNumber = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_CrucibleNumber"].Value.ToString(); //新增加一条数据 LaboratoryTest laboratory = new LaboratoryTest(); laboratory.GUID = Guid.NewGuid().ToString(); laboratory.Sample_Number = strCrucibleNumber + "-" + strSampleCode; laboratory.Sample_Weight = defaultdouble; laboratory.Operator = GlobalCommonOperation.strUserName; laboratory.OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm")); laboratory.DataType = currentCrucibleDataType; laboratory.Crucible_Number = strCrucibleNumber; laboratory.WeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN"); laboratory.OperationType = "add"; laboratoryTests.Add(laboratory); //更改datagridview中的值 dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_ID"].Value = laboratory.GUID; dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleNumber"].Value = laboratory.Sample_Number; dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_WeighingType"].Value = laboratory.WeighingType; dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight; dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_Operator"].Value = laboratory.Operator; dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight; } else //此时说明datagridview中存在旧值,可能存在覆盖问题 { if (MessageBox.Show("单元格已经存在数据,继续将覆盖这个数据,是否继续?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) { string strCurrentID = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString(); var query = laboratoryTests.Where(s => s.GUID == strCurrentID).ToList(); if (query.Count == 1) { query[0].Sample_Weight = defaultdouble; query[0].OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm")); query[0].Operator = GlobalCommonOperation.strUserName; if (query[0].OperationType == null || query[0].OperationType == "") query[0].OperationType = "update"; //更改datagridview中的值 dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = query[0].Sample_Weight; } } } } /// /// 获得当前坩埚选中的样品编码 /// /// /// /// private string GetCurrentSelectedSampleCode(string currentCrucibleDataType, Dictionary DstCurrentGrids) { string strSampleCode = ""; DataGridView dgv = DstCurrentGrids[currentCrucibleDataType]; if (dgv.CurrentCell != null && dgv.Rows[dgv.CurrentCell.RowIndex].Cells[0].Value != null) strSampleCode = dgv.Rows[dgv.CurrentCell.RowIndex].Cells[1].Value.ToString(); return strSampleCode; } /// /// 增加一组坩埚架数据 /// /// /// /// /// /// public void AddCrucibleShelfData(Dictionary DictCrucuibleGrids, DataGridView dgvCrucibleShelf, string currentCrucibleDataType, string strTypeTitle, List laboratoryTests) { //0.判断左侧选中某项内容,如果左侧未选中任何内容,则不应该产生数据 string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DictCrucuibleGrids); //if (strSampleCode == "") return; //1.在datagridview上增加20个数据行 dgvCrucibleShelf.Rows.Clear(); string strWeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN"); for (int i = 1; i < 21; i++) { int index = dgvCrucibleShelf.Rows.Add(); dgvCrucibleShelf.Rows[index].Cells["Shelf_CrucibleNumber"].Value = strWeighingType + strTypeTitle + string.Format("{0:D2}", i); } //2.判断数据库中是否存在该坩埚架的内容,如果存在,则将数据插入到这20行数据行中 var query = laboratoryTests.Where(s => s.DataType == currentCrucibleDataType && s.Crucible_Number != null && s.Crucible_Number.StartsWith($"{strWeighingType}{strTypeTitle}") && s.OperaDateTime.ToString("yyyyMMdd") == DateTime.Now.ToString("yyyyMMdd") && ((s.OperationType == null) || (s.OperationType != null && s.OperationType.ToLower() != "delete"))).ToList(); //判断条件:今天的,样品编码以左侧样品号结尾,坩埚号以称量类型开头。 if (query.Count > 0) { foreach (var item in query) { foreach (DataGridViewRow dgr in dgvCrucibleShelf.Rows) { if (dgr.Cells["Shelf_CrucibleNumber"].Value.ToString() == item.Crucible_Number) { dgr.Cells["Shelf_ID"].Value = item.GUID; dgr.Cells["Shelf_SampleNumber"].Value = item.Sample_Number; dgr.Cells["Shelf_WeighingType"].Value = item.WeighingType; dgr.Cells["Shelf_SampleWeight"].Value = item.Sample_Weight; dgr.Cells["Shelf_Operator"].Value = item.Operator; } } } } } } }