Make_MakeCancelDown.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using UAS_MES_NEW.DataOperate;
  10. using UAS_MES_NEW.Entity;
  11. using UAS_MES_NEW.PublicMethod;
  12. namespace UAS_MES_NEW.Make
  13. {
  14. public partial class Make_MakeCancelDown : Form
  15. {
  16. AutoSizeFormClass asc = new AutoSizeFormClass();
  17. DataTable dt;
  18. DataTable dt1;
  19. DataTable dtbar;
  20. LogStringBuilder sql = new LogStringBuilder();
  21. DataHelper dh;
  22. public Make_MakeCancelDown()
  23. {
  24. InitializeComponent();
  25. }
  26. private void Make_MakeCancelDown_Load(object sender, EventArgs e)
  27. {
  28. asc.controllInitializeSize(this);
  29. md_code_rb.Focus();
  30. //ChooseAllButton 内部用私有字段记录「是否已全选」,累加新行后无法复位其状态;
  31. //公共控件不允许改动,故本界面不再调用 ChooseAll(dgv)(避免挂上控件自带的 Click),
  32. //改为挂本界面自己的切换式全选处理。
  33. ChooseAll.Click += ChooseAll_Click;
  34. dh = SystemInf.dh;
  35. }
  36. //是否已全选:累加新行后需要复位,否则会出现「按钮写着全选、其实已经全选过」的错位
  37. private bool _allChecked = false;
  38. /// <summary>
  39. /// 全选/取消全选(切换式):点击时若已全部勾选则全部取消,否则全部勾选
  40. /// 只改复选框状态,不触发数据刷新
  41. /// </summary>
  42. private void ChooseAll_Click(object sender, EventArgs e)
  43. {
  44. if (LabelDataGridView.Rows.Count == 0)
  45. {
  46. OperateResult.AppendText(">>当前没有可勾选的下地记录\n", Color.Red);
  47. return;
  48. }
  49. bool setValue = !_allChecked;
  50. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  51. {
  52. LabelDataGridView.Rows[i].Cells["Choose"].Value = setValue;
  53. }
  54. //只改 cell value 时复选框显示可能不刷新
  55. LabelDataGridView.RefreshEdit();
  56. _allChecked = setValue;
  57. ChooseAll.Text = setValue ? "取消全选" : "全选";
  58. choosenum.Text = setValue ? LabelDataGridView.Rows.Count.ToString() : "0";
  59. OperateResult.AppendText(setValue ? ">>已全选当前列表\n" : ">>已取消全选\n", Color.Black);
  60. }
  61. private void Make_MakeCancelDown_SizeChanged(object sender, EventArgs e)
  62. {
  63. asc.controlAutoSize(this);
  64. }
  65. private void md_code_rb_Click(object sender, EventArgs e)
  66. {
  67. if (((RadioButton)sender).Checked == true)
  68. {
  69. if (((RadioButton)sender).Name == "md_code_rb")
  70. {
  71. BaseUtil.CleanForm(this);
  72. inputreson.Text = "";
  73. mdcode.Enabled = true;
  74. sn_code.Enabled = false;
  75. mdcode.Focus();
  76. }
  77. else if (((RadioButton)sender).Name == "sn_code_rb")
  78. {
  79. BaseUtil.CleanForm(this);
  80. inputreson.Text = "";
  81. sn_code.Enabled = true;
  82. mdcode.Enabled = false;
  83. sn_code.Focus();
  84. }
  85. //切换模式会清空列表,全选按钮状态同步复位
  86. ResetChooseAllState();
  87. }
  88. }
  89. /// <summary>
  90. /// 复位「全选」按钮的内部状态与文案(列表被清空/重建后必须调用,
  91. /// 否则会出现按钮写着「取消全选」但实际一个都没勾的错位)
  92. /// </summary>
  93. private void ResetChooseAllState()
  94. {
  95. _allChecked = false;
  96. ChooseAll.Text = "全选";
  97. }
  98. private void md_code_KeyDown(object sender, KeyEventArgs e)
  99. {
  100. if (e.KeyCode == Keys.Enter)
  101. {
  102. if (dh.CheckExist("MakeDown", "md_code = '" + mdcode.Text + "'"))
  103. {
  104. sql.Clear();
  105. sql.Append("select md_code,md_sncode,md_macode,md_prodcode,pr_detail from makedown left join product on pr_code=md_prodcode where md_code='" + mdcode.Text + "' and md_status=-1");
  106. dt1 = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  107. if (dt1.Rows.Count > 0)
  108. {
  109. BaseUtil.FillDgvWithDataTable(LabelDataGridView, dt1);
  110. }
  111. else
  112. {
  113. OperateResult.AppendText(">>事件号" + mdcode.Text + "无未取消下地的数据\n", Color.Red);
  114. BaseUtil.CleanDGVData(LabelDataGridView);
  115. }
  116. sum.Text = dt1.Rows.Count.ToString();
  117. make_count.Text = dt1.Rows.Count.ToString();
  118. //列表被整表重建,全选按钮状态复位
  119. ResetChooseAllState();
  120. choosenum.Text = "0";
  121. }
  122. else
  123. {
  124. OperateResult.AppendText(">>事件号" + mdcode.Text + "不存在\n", Color.Red);
  125. }
  126. }
  127. }
  128. private void sn_code_KeyDown(object sender, KeyEventArgs e)
  129. {
  130. if (e.KeyCode == Keys.Enter)
  131. {
  132. string sn = sn_code.Text.Trim();
  133. if (sn == "")
  134. {
  135. return;
  136. }
  137. //累加前先查库:只有存在未取消下地的记录才加进列表(保留原有卡控)
  138. sql.Clear();
  139. sql.Append("select md_code,md_sncode,md_macode,md_prodcode,pr_detail from makedown left join product on pr_code=md_prodcode where md_sncode='" + sn + "' and md_status=-1");
  140. dtbar = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
  141. if (dtbar.Rows.Count == 0)
  142. {
  143. OperateResult.AppendText(">>序列号" + sn + "无未取消下地的数据\n", Color.Red);
  144. sn_code.Clear();
  145. sn_code.Focus();
  146. return;
  147. }
  148. //同一序列号已在列表中则跳过,避免重复取消下地
  149. if (ExistsSnInGrid(sn))
  150. {
  151. OperateResult.AppendText(">>序列号" + sn + "已在列表中,不重复添加\n", Color.Red);
  152. sn_code.Clear();
  153. sn_code.Focus();
  154. return;
  155. }
  156. //把本次扫描到的记录累加到DGV中(保留原有列:工单编号/序列号/产品代码/产品名称/事件号)
  157. //注意:事件号模式用过 FillDgvWithDataTable 后 DGV 还挂着 DataSource,
  158. //此时 Rows.Add() 会抛 InvalidOperationException,故先解绑定再手工加行
  159. if (LabelDataGridView.DataSource != null)
  160. {
  161. LabelDataGridView.DataSource = null;
  162. LabelDataGridView.Rows.Clear();
  163. }
  164. for (int i = 0; i < dtbar.Rows.Count; i++)
  165. {
  166. int idx = LabelDataGridView.Rows.Add();
  167. DataGridViewRow row = LabelDataGridView.Rows[idx];
  168. row.Cells["md_macode"].Value = dtbar.Rows[i]["md_macode"].ToString();
  169. row.Cells["md_sncode"].Value = dtbar.Rows[i]["md_sncode"].ToString();
  170. row.Cells["md_prodcode"].Value = dtbar.Rows[i]["md_prodcode"].ToString();
  171. row.Cells["pr_detail"].Value = dtbar.Rows[i]["pr_detail"].ToString();
  172. row.Cells["md_code"].Value = dtbar.Rows[i]["md_code"].ToString();
  173. //新累加的行默认不勾选,由用户自己勾选或点「全选」
  174. row.Cells["Choose"].Value = false;
  175. }
  176. OperateResult.AppendText(">>序列号" + sn + "已累加,当前共" + LabelDataGridView.Rows.Count + "条\n", Color.Black);
  177. //累加后新行未勾选,把全选按钮拉回「未全选」状态,避免与界面显示错位
  178. _allChecked = false;
  179. sum.Text = LabelDataGridView.Rows.Count.ToString();
  180. choosenum.Text = "0";
  181. sn_code.Clear();
  182. sn_code.Focus();
  183. }
  184. }
  185. /// <summary>
  186. /// 判断指定的序列号是否已存在于DGV列表中
  187. /// </summary>
  188. private bool ExistsSnInGrid(string sn)
  189. {
  190. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  191. {
  192. if (LabelDataGridView.Rows[i].Cells["md_sncode"].Value != null
  193. && LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString() == sn)
  194. {
  195. return true;
  196. }
  197. }
  198. return false;
  199. }
  200. private void Sure_Click(object sender, EventArgs e)
  201. {
  202. if (inputreson.Text.Trim() != "")
  203. {
  204. Boolean cancle = false;
  205. Boolean haveclick = false;
  206. //本次处理的取消下地成功数量(SN模式下一个SN可能对应多行,按行统计)
  207. int doneCount = 0;
  208. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  209. {
  210. if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
  211. {
  212. if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
  213. {
  214. haveclick = true;
  215. }
  216. }
  217. }
  218. if (!haveclick)
  219. {
  220. OperateResult.AppendText(">>>没有勾选下地记录\n", Color.Red);
  221. return;
  222. }
  223. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  224. {
  225. if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
  226. {
  227. if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
  228. {
  229. //更新取消下地原因
  230. dh.UpdateByCondition("makedown", "md_status=0,MD_UPREASON='" + inputreson.Text + "', MD_UPDATE=sysdate, MD_UPMAN='" + User.UserCode + "' ", " md_code = '" + LabelDataGridView.Rows[i].Cells["md_code"].Value.ToString() + "' and md_sncode = '" + LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString() + "'");
  231. //更新序列号状态
  232. sql.Clear();
  233. sql.Append("update makeserial set ms_downstatus=0 where ms_sncode='" + LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString() + "' and ms_makecode='" + LabelDataGridView.Rows[i].Cells["md_macode"].Value.ToString() + "'");
  234. dh.ExecuteSql(sql.GetString(), "update");
  235. LogicHandler.DoCommandLog(Tag.ToString(), User.UserCode, LabelDataGridView.Rows[i].Cells["md_macode"].Value.ToString(), User.UserLineCode, User.UserSourceCode, "取消下地操作", "序列号" + LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString() + "下地成功", LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString(), "");
  236. doneCount++;
  237. }
  238. }
  239. }
  240. if (sn_code.Enabled)
  241. {
  242. //SN模式:列表是累加出来的,确认后整表清空,提示本次成功条数
  243. OperateResult.AppendText(">>>本次取消下地成功" + doneCount + "条,已清空列表\n", Color.Green);
  244. sn_code.Text = "";
  245. sn_code.Focus();
  246. inputreson.Text = "";
  247. sum.Text = "";
  248. choosenum.Text = "";
  249. BaseUtil.CleanDGVData(LabelDataGridView);
  250. ResetChooseAllState();
  251. }
  252. else if (mdcode.Enabled)
  253. {
  254. sum.Text = "";
  255. choosenum.Text = "";
  256. OperateResult.AppendText(">>>事件号" + mdcode.Text + "取消下地成功\n", Color.Green);
  257. mdcode.Focus();
  258. md_code_KeyDown(sender, new KeyEventArgs(Keys.Enter));
  259. }
  260. }
  261. else
  262. {
  263. OperateResult.AppendText(">>>没有填写取消下地原因\n", Color.Red);
  264. return;
  265. }
  266. }
  267. //已选数据更新
  268. private void LabelDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  269. {
  270. int choosecount = 0;
  271. for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
  272. {
  273. if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
  274. {
  275. if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
  276. {
  277. choosecount++;
  278. }
  279. }
  280. }
  281. choosenum.Text = choosecount.ToString();
  282. }
  283. //勾选框更改提交
  284. private void LabelDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
  285. {
  286. if (LabelDataGridView.IsCurrentCellDirty)
  287. {
  288. LabelDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
  289. }
  290. }
  291. }
  292. }