CNAS取数仪器端升级
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

162 行
9.0KB

  1. using CnasSynchronusClient;
  2. using CnasSynchrousModel;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. namespace CNAS_BalanceClient
  9. {
  10. public class CrucibleUIOperation
  11. {
  12. /// <summary>
  13. /// 将天平端传输过来的重量传输到坩埚数据中
  14. /// </summary>
  15. /// <param name="DstCurrentLeftGrids"></param>
  16. /// <param name="dgvCrucibleShelf"></param>
  17. /// <param name="defaultdouble"></param>
  18. /// <param name="currentCrucibleDataType"></param>
  19. /// <param name="laboratoryTests"></param>
  20. public void UpdateCrucibleBalanceWeight(Dictionary<string, DataGridView> DstCurrentLeftGrids, DataGridView dgvCrucibleShelf, double defaultdouble, string currentCrucibleDataType, List<LaboratoryTest> laboratoryTests)
  21. {
  22. //当前坩埚架选中单元格
  23. if (dgvCrucibleShelf.CurrentCell == null) return;
  24. if (dgvCrucibleShelf.CurrentCell.ColumnIndex != 3) return; //索引为3的列为“重量”列,其他列不允许插入数值
  25. //是否满足称重范围
  26. double MinValue = 0;
  27. double MaxValue = 0;
  28. switch (currentCrucibleDataType)
  29. {
  30. case "Crucible|Heat":
  31. MinValue = 0.9;
  32. MaxValue = 1.1;
  33. break;
  34. case "Crucible|Sulfur":
  35. MinValue = 0.045;
  36. MaxValue = 0.055;
  37. break;
  38. case "Crucible|Hydrogen":
  39. MinValue = 0.05;
  40. MaxValue = 0.2;
  41. break;
  42. }
  43. if (defaultdouble > MaxValue || defaultdouble < MinValue)
  44. {
  45. MessageBox.Show($"称重范围是{MinValue}g~{MaxValue}g.", "提示");
  46. return;
  47. }
  48. if (dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value == null || dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString() == "")
  49. {
  50. //此时说明datagridview中没有旧值,不存在覆盖问题,可以直接增加数据
  51. string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DstCurrentLeftGrids);
  52. if (strSampleCode == "") return; //此时未获得左侧样品编号,不能在右侧增加数据
  53. string strCrucibleNumber = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_CrucibleNumber"].Value.ToString();
  54. //新增加一条数据
  55. LaboratoryTest laboratory = new LaboratoryTest();
  56. laboratory.GUID = Guid.NewGuid().ToString();
  57. laboratory.Sample_Number = strCrucibleNumber + "-" + strSampleCode;
  58. laboratory.Sample_Weight = defaultdouble;
  59. laboratory.Operator = GlobalCommonOperation.strUserName;
  60. laboratory.OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
  61. laboratory.DataType = currentCrucibleDataType;
  62. laboratory.Crucible_Number = strCrucibleNumber;
  63. laboratory.WeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN");
  64. laboratory.OperationType = "add";
  65. laboratoryTests.Add(laboratory);
  66. //更改datagridview中的值
  67. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_ID"].Value = laboratory.GUID;
  68. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleNumber"].Value = laboratory.Sample_Number;
  69. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_WeighingType"].Value = laboratory.WeighingType;
  70. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight;
  71. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_Operator"].Value = laboratory.Operator;
  72. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = laboratory.Sample_Weight;
  73. }
  74. else //此时说明datagridview中存在旧值,可能存在覆盖问题
  75. {
  76. if (MessageBox.Show("单元格已经存在数据,继续将覆盖这个数据,是否继续?", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
  77. {
  78. string strCurrentID = dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells[0].Value.ToString();
  79. var query = laboratoryTests.Where(s => s.GUID == strCurrentID).ToList<LaboratoryTest>();
  80. if (query.Count == 1)
  81. {
  82. query[0].Sample_Weight = defaultdouble;
  83. query[0].OperaDateTime = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
  84. query[0].Operator = GlobalCommonOperation.strUserName;
  85. if (query[0].OperationType == null || query[0].OperationType == "")
  86. query[0].OperationType = "update";
  87. //更改datagridview中的值
  88. dgvCrucibleShelf.Rows[dgvCrucibleShelf.CurrentCell.RowIndex].Cells["Shelf_SampleWeight"].Value = query[0].Sample_Weight;
  89. }
  90. }
  91. }
  92. }
  93. /// <summary>
  94. /// 获得当前坩埚选中的样品编码
  95. /// </summary>
  96. /// <param name="currentCrucibleDataType"></param>
  97. /// <param name="DstCurrentGrids"></param>
  98. /// <returns></returns>
  99. private string GetCurrentSelectedSampleCode(string currentCrucibleDataType, Dictionary<string, DataGridView> DstCurrentGrids)
  100. {
  101. string strSampleCode = "";
  102. DataGridView dgv = DstCurrentGrids[currentCrucibleDataType];
  103. if (dgv.CurrentCell != null && dgv.Rows[dgv.CurrentCell.RowIndex].Cells[0].Value != null)
  104. strSampleCode = dgv.Rows[dgv.CurrentCell.RowIndex].Cells[1].Value.ToString();
  105. return strSampleCode;
  106. }
  107. /// <summary>
  108. /// 增加一组坩埚架数据
  109. /// </summary>
  110. /// <param name="DictCrucuibleGrids"></param>
  111. /// <param name="dgvCrucibleShelf"></param>
  112. /// <param name="currentCrucibleDataType"></param>
  113. /// <param name="strTypeTitle"></param>
  114. /// <param name="laboratoryTests"></param>
  115. public void AddCrucibleShelfData(Dictionary<string, DataGridView> DictCrucuibleGrids, DataGridView dgvCrucibleShelf, string currentCrucibleDataType, string strTypeTitle, List<LaboratoryTest> laboratoryTests)
  116. {
  117. //0.判断左侧选中某项内容,如果左侧未选中任何内容,则不应该产生数据
  118. string strSampleCode = GetCurrentSelectedSampleCode(currentCrucibleDataType, DictCrucuibleGrids);
  119. //if (strSampleCode == "") return;
  120. //1.在datagridview上增加20个数据行
  121. dgvCrucibleShelf.Rows.Clear();
  122. string strWeighingType = currentCrucibleDataType == "Crucible|Heat" ? "FRL" : (currentCrucibleDataType == "Crucible|Sulfur" ? "CLY" : "CHN");
  123. for (int i = 1; i < 21; i++)
  124. {
  125. int index = dgvCrucibleShelf.Rows.Add();
  126. dgvCrucibleShelf.Rows[index].Cells["Shelf_CrucibleNumber"].Value = strWeighingType + strTypeTitle + string.Format("{0:D2}", i);
  127. }
  128. //2.判断数据库中是否存在该坩埚架的内容,如果存在,则将数据插入到这20行数据行中
  129. 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<LaboratoryTest>(); //判断条件:今天的,样品编码以左侧样品号结尾,坩埚号以称量类型开头。
  130. if (query.Count > 0)
  131. {
  132. foreach (var item in query)
  133. {
  134. foreach (DataGridViewRow dgr in dgvCrucibleShelf.Rows)
  135. {
  136. if (dgr.Cells["Shelf_CrucibleNumber"].Value.ToString() == item.Crucible_Number)
  137. {
  138. dgr.Cells["Shelf_ID"].Value = item.GUID;
  139. dgr.Cells["Shelf_SampleNumber"].Value = item.Sample_Number;
  140. dgr.Cells["Shelf_WeighingType"].Value = item.WeighingType;
  141. dgr.Cells["Shelf_SampleWeight"].Value = item.Sample_Weight;
  142. dgr.Cells["Shelf_Operator"].Value = item.Operator;
  143. }
  144. }
  145. }
  146. }
  147. }
  148. }
  149. }