| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- using UAS_MES_NEW.DataOperate;
- using UAS_MES_NEW.Entity;
- using UAS_MES_NEW.PublicMethod;
- namespace UAS_MES_NEW.Make
- {
- public partial class Make_MakeCancelDown : Form
- {
- AutoSizeFormClass asc = new AutoSizeFormClass();
- DataTable dt;
- DataTable dt1;
- DataTable dtbar;
- LogStringBuilder sql = new LogStringBuilder();
- DataHelper dh;
- public Make_MakeCancelDown()
- {
- InitializeComponent();
- }
- private void Make_MakeCancelDown_Load(object sender, EventArgs e)
- {
- asc.controllInitializeSize(this);
- md_code_rb.Focus();
- //ChooseAllButton 内部用私有字段记录「是否已全选」,累加新行后无法复位其状态;
- //公共控件不允许改动,故本界面不再调用 ChooseAll(dgv)(避免挂上控件自带的 Click),
- //改为挂本界面自己的切换式全选处理。
- ChooseAll.Click += ChooseAll_Click;
- dh = SystemInf.dh;
- }
- //是否已全选:累加新行后需要复位,否则会出现「按钮写着全选、其实已经全选过」的错位
- private bool _allChecked = false;
- /// <summary>
- /// 全选/取消全选(切换式):点击时若已全部勾选则全部取消,否则全部勾选
- /// 只改复选框状态,不触发数据刷新
- /// </summary>
- private void ChooseAll_Click(object sender, EventArgs e)
- {
- if (LabelDataGridView.Rows.Count == 0)
- {
- OperateResult.AppendText(">>当前没有可勾选的下地记录\n", Color.Red);
- return;
- }
- bool setValue = !_allChecked;
- for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
- {
- LabelDataGridView.Rows[i].Cells["Choose"].Value = setValue;
- }
- //只改 cell value 时复选框显示可能不刷新
- LabelDataGridView.RefreshEdit();
- _allChecked = setValue;
- ChooseAll.Text = setValue ? "取消全选" : "全选";
- choosenum.Text = setValue ? LabelDataGridView.Rows.Count.ToString() : "0";
- OperateResult.AppendText(setValue ? ">>已全选当前列表\n" : ">>已取消全选\n", Color.Black);
- }
- private void Make_MakeCancelDown_SizeChanged(object sender, EventArgs e)
- {
- asc.controlAutoSize(this);
- }
- private void md_code_rb_Click(object sender, EventArgs e)
- {
- if (((RadioButton)sender).Checked == true)
- {
- if (((RadioButton)sender).Name == "md_code_rb")
- {
- BaseUtil.CleanForm(this);
- inputreson.Text = "";
- mdcode.Enabled = true;
- sn_code.Enabled = false;
- mdcode.Focus();
- }
- else if (((RadioButton)sender).Name == "sn_code_rb")
- {
- BaseUtil.CleanForm(this);
- inputreson.Text = "";
- sn_code.Enabled = true;
- mdcode.Enabled = false;
- sn_code.Focus();
- }
- //切换模式会清空列表,全选按钮状态同步复位
- ResetChooseAllState();
- }
- }
- /// <summary>
- /// 复位「全选」按钮的内部状态与文案(列表被清空/重建后必须调用,
- /// 否则会出现按钮写着「取消全选」但实际一个都没勾的错位)
- /// </summary>
- private void ResetChooseAllState()
- {
- _allChecked = false;
- ChooseAll.Text = "全选";
- }
- private void md_code_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Enter)
- {
- if (dh.CheckExist("MakeDown", "md_code = '" + mdcode.Text + "'"))
- {
- sql.Clear();
- 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");
- dt1 = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
- if (dt1.Rows.Count > 0)
- {
- BaseUtil.FillDgvWithDataTable(LabelDataGridView, dt1);
- }
- else
- {
- OperateResult.AppendText(">>事件号" + mdcode.Text + "无未取消下地的数据\n", Color.Red);
- BaseUtil.CleanDGVData(LabelDataGridView);
- }
- sum.Text = dt1.Rows.Count.ToString();
- make_count.Text = dt1.Rows.Count.ToString();
- //列表被整表重建,全选按钮状态复位
- ResetChooseAllState();
- choosenum.Text = "0";
- }
- else
- {
- OperateResult.AppendText(">>事件号" + mdcode.Text + "不存在\n", Color.Red);
- }
- }
- }
- private void sn_code_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode == Keys.Enter)
- {
- string sn = sn_code.Text.Trim();
- if (sn == "")
- {
- return;
- }
- //累加前先查库:只有存在未取消下地的记录才加进列表(保留原有卡控)
- sql.Clear();
- 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");
- dtbar = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
- if (dtbar.Rows.Count == 0)
- {
- OperateResult.AppendText(">>序列号" + sn + "无未取消下地的数据\n", Color.Red);
- sn_code.Clear();
- sn_code.Focus();
- return;
- }
- //同一序列号已在列表中则跳过,避免重复取消下地
- if (ExistsSnInGrid(sn))
- {
- OperateResult.AppendText(">>序列号" + sn + "已在列表中,不重复添加\n", Color.Red);
- sn_code.Clear();
- sn_code.Focus();
- return;
- }
- //把本次扫描到的记录累加到DGV中(保留原有列:工单编号/序列号/产品代码/产品名称/事件号)
- //注意:事件号模式用过 FillDgvWithDataTable 后 DGV 还挂着 DataSource,
- //此时 Rows.Add() 会抛 InvalidOperationException,故先解绑定再手工加行
- if (LabelDataGridView.DataSource != null)
- {
- LabelDataGridView.DataSource = null;
- LabelDataGridView.Rows.Clear();
- }
- for (int i = 0; i < dtbar.Rows.Count; i++)
- {
- int idx = LabelDataGridView.Rows.Add();
- DataGridViewRow row = LabelDataGridView.Rows[idx];
- row.Cells["md_macode"].Value = dtbar.Rows[i]["md_macode"].ToString();
- row.Cells["md_sncode"].Value = dtbar.Rows[i]["md_sncode"].ToString();
- row.Cells["md_prodcode"].Value = dtbar.Rows[i]["md_prodcode"].ToString();
- row.Cells["pr_detail"].Value = dtbar.Rows[i]["pr_detail"].ToString();
- row.Cells["md_code"].Value = dtbar.Rows[i]["md_code"].ToString();
- //新累加的行默认不勾选,由用户自己勾选或点「全选」
- row.Cells["Choose"].Value = false;
- }
- OperateResult.AppendText(">>序列号" + sn + "已累加,当前共" + LabelDataGridView.Rows.Count + "条\n", Color.Black);
- //累加后新行未勾选,把全选按钮拉回「未全选」状态,避免与界面显示错位
- _allChecked = false;
- sum.Text = LabelDataGridView.Rows.Count.ToString();
- choosenum.Text = "0";
- sn_code.Clear();
- sn_code.Focus();
- }
- }
- /// <summary>
- /// 判断指定的序列号是否已存在于DGV列表中
- /// </summary>
- private bool ExistsSnInGrid(string sn)
- {
- for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
- {
- if (LabelDataGridView.Rows[i].Cells["md_sncode"].Value != null
- && LabelDataGridView.Rows[i].Cells["md_sncode"].Value.ToString() == sn)
- {
- return true;
- }
- }
- return false;
- }
- private void Sure_Click(object sender, EventArgs e)
- {
- if (inputreson.Text.Trim() != "")
- {
- Boolean cancle = false;
- Boolean haveclick = false;
- //本次处理的取消下地成功数量(SN模式下一个SN可能对应多行,按行统计)
- int doneCount = 0;
- for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
- {
- if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
- {
- if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
- {
- haveclick = true;
- }
- }
- }
- if (!haveclick)
- {
- OperateResult.AppendText(">>>没有勾选下地记录\n", Color.Red);
- return;
- }
- for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
- {
- if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
- {
- if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
- {
- //更新取消下地原因
- 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() + "'");
- //更新序列号状态
- sql.Clear();
- 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() + "'");
- dh.ExecuteSql(sql.GetString(), "update");
- 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(), "");
- doneCount++;
- }
- }
- }
- if (sn_code.Enabled)
- {
- //SN模式:列表是累加出来的,确认后整表清空,提示本次成功条数
- OperateResult.AppendText(">>>本次取消下地成功" + doneCount + "条,已清空列表\n", Color.Green);
- sn_code.Text = "";
- sn_code.Focus();
- inputreson.Text = "";
- sum.Text = "";
- choosenum.Text = "";
- BaseUtil.CleanDGVData(LabelDataGridView);
- ResetChooseAllState();
- }
- else if (mdcode.Enabled)
- {
- sum.Text = "";
- choosenum.Text = "";
- OperateResult.AppendText(">>>事件号" + mdcode.Text + "取消下地成功\n", Color.Green);
- mdcode.Focus();
- md_code_KeyDown(sender, new KeyEventArgs(Keys.Enter));
- }
- }
- else
- {
- OperateResult.AppendText(">>>没有填写取消下地原因\n", Color.Red);
- return;
- }
- }
- //已选数据更新
- private void LabelDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
- {
- int choosecount = 0;
- for (int i = 0; i < LabelDataGridView.Rows.Count; i++)
- {
- if (LabelDataGridView.Rows[i].Cells["Choose"].Value != null)
- {
- if ((Boolean)LabelDataGridView.Rows[i].Cells["Choose"].Value == true)
- {
- choosecount++;
- }
- }
- }
- choosenum.Text = choosecount.ToString();
- }
- //勾选框更改提交
- private void LabelDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e)
- {
- if (LabelDataGridView.IsCurrentCellDirty)
- {
- LabelDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
- }
- }
- }
- }
|