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;
///
/// 全选/取消全选(切换式):点击时若已全部勾选则全部取消,否则全部勾选
/// 只改复选框状态,不触发数据刷新
///
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();
}
}
///
/// 复位「全选」按钮的内部状态与文案(列表被清空/重建后必须调用,
/// 否则会出现按钮写着「取消全选」但实际一个都没勾的错位)
///
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();
}
}
///
/// 判断指定的序列号是否已存在于DGV列表中
///
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);
}
}
}
}