using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using Mesnac.Action.Base; using Mesnac.Controls.Base; using Mesnac.Controls.Default; using System.Windows.Forms; using Mesnac.Codd.Session; using Mesnac.Action.Feeding.Qingquan.SynchroData; namespace Mesnac.Action.Feeding.Qingquan.Technology { /// /// 初始化加载配方数据 /// public class IniRecipe : FeedingAction, IAction { private static bool IsFirstRun = true; //是否首次执行 private static object oldSender = null; /// /// 配方界面初始化 /// /// public void Run(RuntimeParameter runtime) { base.RunIni(runtime); //必须调用 List gridList = GetTControls(); if (IsFirstRun && gridList.Count > 0) { InitGridData(gridList); oldSender = runtime.Sender; IsFirstRun = false; } if (oldSender != runtime.Sender && gridList.Count > 0) { InitGridData(gridList); oldSender = runtime.Sender; } } /// /// 初始化配方的网格控件 /// /// private void InitGridData(List gridList) { foreach (MCDataGridView grid in gridList) { if (grid.MCKey != null && grid.MCKey.ToLower().StartsWith("PmtWeight.".ToLower())) { grid.ContextMenuStrip = IniDelMenu(); int iType = 0; if (int.TryParse(grid.MCKey.Substring("PmtWeight.".Length).Trim(), out iType)) { IniWeightHead(grid, iType); } } if (grid.MCKey != null && grid.MCKey.ToLower() == "PmtMixing".ToLower()) { grid.ContextMenuStrip = IniMoveMenu(); IniPmtMixingHead(grid); } } } private ContextMenuStrip IniDelMenu() { ContextMenuStrip Result = new ContextMenuStrip(); Result.ResumeLayout(false); ToolStripMenuItem ToolStripMenuItem0 = new ToolStripMenuItem(); ToolStripMenuItem0.Name = "ToolStripMenuItem0"; ToolStripMenuItem0.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem0.Text = Language(200); ToolStripMenuItem0.Click += toolStripMenuItem_Click; Result.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ToolStripMenuItem0}); ToolStripMenuItem ToolStripMenuItem1 = new ToolStripMenuItem(); ToolStripMenuItem1.Name = "ToolStripMenuItem5"; ToolStripMenuItem1.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem1.Text = "上移"; ToolStripMenuItem1.Click += toolStripMenuItem_Click; Result.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ToolStripMenuItem1}); ToolStripMenuItem ToolStripMenuItem2 = new ToolStripMenuItem(); ToolStripMenuItem2.Name = "ToolStripMenuItem6"; ToolStripMenuItem2.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem2.Text = "下移"; ToolStripMenuItem2.Click += toolStripMenuItem_Click; Result.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ToolStripMenuItem2}); ToolStripMenuItem ToolStripMenuItem3 = new ToolStripMenuItem(); ToolStripMenuItem3.Name = "ToolStripMenuItem7"; ToolStripMenuItem3.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem3.Text = "插入"; ToolStripMenuItem3.Click += toolStripMenuItem_Click; Result.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ToolStripMenuItem3}); Result.Name = "WeightMenu"; return Result; } private ContextMenuStrip IniMoveMenu() { ContextMenuStrip Result = new ContextMenuStrip(); Result.ResumeLayout(false); ToolStripMenuItem ToolStripMenuItem1 = new ToolStripMenuItem(); ToolStripMenuItem1.Name = "ToolStripMenuItem1"; ToolStripMenuItem1.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem1.Text = Language(201); //201插入 ToolStripMenuItem1.Click += toolStripMenuItem_Click; ToolStripMenuItem ToolStripMenuItem2 = new ToolStripMenuItem(); ToolStripMenuItem2.Name = "ToolStripMenuItem2"; ToolStripMenuItem2.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem2.Text = Language(200); //200删除 ToolStripMenuItem2.Click += toolStripMenuItem_Click; ToolStripMenuItem ToolStripMenuItem3 = new ToolStripMenuItem(); ToolStripMenuItem3.Name = "ToolStripMenuItem3"; ToolStripMenuItem3.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem3.Text = Language(202); //202上移 ToolStripMenuItem3.Click += toolStripMenuItem_Click; ToolStripMenuItem ToolStripMenuItem4 = new ToolStripMenuItem(); ToolStripMenuItem4.Name = "ToolStripMenuItem4"; ToolStripMenuItem4.Size = new System.Drawing.Size(98, 22); ToolStripMenuItem4.Text = Language(203); //203下移 ToolStripMenuItem4.Click += toolStripMenuItem_Click; Result.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { ToolStripMenuItem1, ToolStripMenuItem2, ToolStripMenuItem3, ToolStripMenuItem4}); Result.Name = "MixingMenu"; return Result; } private void IniDataGridEvent(DataGridView grid) { grid.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None; grid.DataError += dataGridView_DataError; grid.CellValueChanged += dataGridView_CellValueChanged; grid.CellValidating += dataGridView_CellValidating; grid.CellMouseDown += dataGridView_CellMouseDown; grid.SortCompare += dataGridView_SortCompare; grid.AllowUserToAddRows = false; grid.ReadOnly = false; grid.AutoGenerateColumns = false; grid.AllowUserToResizeRows = false; grid.EditMode = System.Windows.Forms.DataGridViewEditMode.EditOnEnter; } #region 初始化称量信息网格表头(炭黑、油、胶料(小料、油2)) /// /// 初始化称量信息网格表头(炭黑、油、胶料(小料、油2)) /// /// 称量信息网格控件 /// 称量类型0-炭黑、1-油1、2-胶料、3- private void IniWeightHead(DataGridView grid, int id) { IniDataGridEvent(grid); #region 初始化表头字段 DataGridViewTextBoxColumn a1 = new DataGridViewTextBoxColumn(); a1.SortMode = DataGridViewColumnSortMode.NotSortable; a1.DataPropertyName = "SeqInx"; a1.HeaderText = "a" + id.ToString(); a1.Width = 40; grid.Columns.Add(a1); DataGridViewComboBoxColumn a2 = new DataGridViewComboBoxColumn(); a2.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; a2.SortMode = DataGridViewColumnSortMode.NotSortable; a2.DataPropertyName = "act_code"; a2.HeaderText = Language(210); a2.ValueMember = "ssKey"; a2.DisplayMember = "ssValue"; a2.Width = 80; grid.Columns.Add(a2); DataGridViewComboBoxColumn a3 = new DataGridViewComboBoxColumn(); a3.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; a3.SortMode = DataGridViewColumnSortMode.NotSortable; a3.DataPropertyName = "child_code"; a3.HeaderText = Language(211); a3.ValueMember = "mater_code"; a3.DisplayMember = "mater_name"; a3.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; grid.Columns.Add(a3); DataGridViewTextBoxColumn a4 = new DataGridViewTextBoxColumn(); a4.SortMode = DataGridViewColumnSortMode.NotSortable; a4.DataPropertyName = "child_code"; a4.HeaderText = Language(212); a4.Width = 100; grid.Columns.Add(a4); DataGridViewTextBoxColumn a5 = new DataGridViewTextBoxColumn(); a5.ValueType = typeof(double); a5.SortMode = DataGridViewColumnSortMode.NotSortable; a5.DataPropertyName = "set_weight"; a5.HeaderText = Language(213); a5.Width = 60; grid.Columns.Add(a5); DataGridViewTextBoxColumn a6 = new DataGridViewTextBoxColumn(); a6.ValueType = typeof(double); a6.SortMode = DataGridViewColumnSortMode.NotSortable; a6.DataPropertyName = "error_allow"; a6.HeaderText = Language(214); a6.Width = 60; grid.Columns.Add(a6); if (id == 2 && base.GetConfigValue("IsAutoPloy", "0") == "1") { DataGridViewComboBoxColumn a7 = new DataGridViewComboBoxColumn(); a7.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; a7.SortMode = DataGridViewColumnSortMode.NotSortable; a7.DataPropertyName = "Auto_ploy"; a7.HeaderText = Language(305); a7.ValueMember = "ssKey"; a7.DisplayMember = "ssValue"; a7.Width = 80; grid.Columns.Add(a7); string sqlstr = "SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='AutoPloy'"; DbHelper dbHelper = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; DataTable dt_ploy = dbHelper.ToDataTable(); a7.DataSource = dt_ploy; #region 增加下拉时自动刷新数据 a7.DataGridView.CellBeginEdit += delegate(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == a7.Index) { string sqlstr7 = "SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='AutoPloy'"; DbHelper dbHelper7 = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper7.CommandType = CommandType.Text; dbHelper7.ClearParameter(); dbHelper7.CommandText = sqlstr7; DataTable dt_ploy7 = dbHelper7.ToDataTable(); a7.DataSource = dt_ploy7; } }; #endregion } #endregion #region 初始化称量动作 if (true) //初始化称量动作 { //string sqlstr = "SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='WeightAction'"; string sqlstr = "select '-1' as ssKey,'' as ssValue union all SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='WeightAction'"; DbHelper dbHelper = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; DataTable dt_act = dbHelper.ToDataTable(); a2.DataSource = dt_act; #region 增加下拉时自动刷新称量动作数据 a2.DataGridView.CellBeginEdit += delegate(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == a2.Index) { //string sqlstr2 = "SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='WeightAction'"; string sqlstr2 = "select '-1' as ssKey,'' as ssValue union all SELECT ItemCode AS ssKey,ItemName AS ssValue FROM SysCode WHERE TypeID='WeightAction'"; DbHelper dbHelper2 = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper2.CommandType = CommandType.Text; dbHelper2.ClearParameter(); dbHelper2.CommandText = sqlstr2; DataTable dt_act2 = dbHelper2.ToDataTable(); a2.DataSource = dt_act2; } }; #endregion } #endregion #region 初始化称量物料 if (true) //初始化称量物料 { string sqlstr = "SELECT * FROM PmtConfig WHERE TypeCode='WeightMaterial' AND ItemCode='" + id.ToString() + "'"; DbHelper dbHelper = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; DataTable dtconfig = dbHelper.ToDataTable(); foreach (DataRow row in dtconfig.Rows) { a1.HeaderText = row["ItemName"].ToString(); sqlstr = row["ItemInfo"].ToString(); dbHelper.CommandText = sqlstr; DataTable dt = dbHelper.ToDataTable(); DataRow dr_0 = dt.NewRow(); dr_0["ObjID"] = 0; dr_0["mater_code"] = string.Empty; dr_0["mater_name"] = string.Empty; dt.Rows.InsertAt(dr_0, 0); a3.DataSource = dt; break; } a3.DataGridView.CellBeginEdit += delegate(object sender, DataGridViewCellCancelEventArgs e) { if (e.ColumnIndex == a3.Index) { string sqlstr3 = "SELECT * FROM PmtConfig WHERE TypeCode='WeightMaterial' AND ItemCode='" + id.ToString() + "'"; DbHelper dbHelper3 = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper3.CommandType = CommandType.Text; dbHelper3.ClearParameter(); dbHelper3.CommandText = sqlstr3; DataTable dtconfig3 = dbHelper3.ToDataTable(); foreach (DataRow row in dtconfig3.Rows) { a1.HeaderText = row["ItemName"].ToString(); sqlstr = row["ItemInfo"].ToString(); dbHelper3.CommandText = sqlstr; DataTable dt3 = dbHelper3.ToDataTable(); DataRow dr_03 = dt3.NewRow(); dr_03["ObjID"] = 0; dr_03["mater_code"] = string.Empty; dr_03["mater_name"] = string.Empty; dt3.Rows.InsertAt(dr_03, 0); a3.DataSource = dt3; break; } } }; #region 物料更新后,刷新称量组件中的物料信息 MaterialSynchronous.MaterialSynchronousComplete += delegate(object sender, System.EventArgs e) { string sqlstr3 = "SELECT * FROM PmtConfig WHERE TypeCode='WeightMaterial' AND ItemCode='" + id.ToString() + "'"; DbHelper dbHelper3 = NewDbHelper(Mesnac.Basic.DataSourceFactory.MCDbType.Local); dbHelper3.CommandType = CommandType.Text; dbHelper3.ClearParameter(); dbHelper3.CommandText = sqlstr3; DataTable dtconfig3 = dbHelper3.ToDataTable(); foreach (DataRow row in dtconfig3.Rows) { a1.HeaderText = row["ItemName"].ToString(); sqlstr = row["ItemInfo"].ToString(); dbHelper3.CommandText = sqlstr; DataTable dt3 = dbHelper3.ToDataTable(); DataRow dr_03 = dt3.NewRow(); dr_03["ObjID"] = 0; dr_03["mater_code"] = string.Empty; dr_03["mater_name"] = string.Empty; dt3.Rows.InsertAt(dr_03, 0); a3.DataSource = dt3; break; } }; #endregion } #endregion } #endregion #region 初始化密炼信息网格表头 /// /// 初始化密炼信息网格表头 /// /// private void IniPmtMixingHead(DataGridView grid) { IniDataGridEvent(grid); #region 初始化表头字段 DataGridViewTextBoxColumn a1 = new DataGridViewTextBoxColumn(); a1.SortMode = DataGridViewColumnSortMode.NotSortable; a1.DataPropertyName = "SeqInx"; a1.HeaderText = Language(216); a1.Width = 30; grid.Columns.Add(a1); DataGridViewComboBoxColumn a2 = new DataGridViewComboBoxColumn(); a2.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; a2.SortMode = DataGridViewColumnSortMode.NotSortable; a2.MaxDropDownItems = 20; a2.DataPropertyName = "term_code"; a2.HeaderText = Language(217); a2.ValueMember = "TermCode"; a2.DisplayMember = "ShowName"; a2.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; grid.Columns.Add(a2); DataGridViewTextBoxColumn a3 = new DataGridViewTextBoxColumn(); a3.ValueType = typeof(int); a3.SortMode = DataGridViewColumnSortMode.NotSortable; a3.DataPropertyName = "set_time"; a3.HeaderText = Language(218); a3.Width = 40; grid.Columns.Add(a3); DataGridViewTextBoxColumn a4 = new DataGridViewTextBoxColumn(); a4.ValueType = typeof(double); a4.SortMode = DataGridViewColumnSortMode.NotSortable; a4.DataPropertyName = "set_temp"; a4.HeaderText = Language(219); a4.Width = 40; grid.Columns.Add(a4); DataGridViewTextBoxColumn a5 = new DataGridViewTextBoxColumn(); a5.ValueType = typeof(double); a5.SortMode = DataGridViewColumnSortMode.NotSortable; a5.DataPropertyName = "set_power"; a5.HeaderText = Language(220); a5.Width = 40; grid.Columns.Add(a5); DataGridViewTextBoxColumn a6 = new DataGridViewTextBoxColumn(); a5.ValueType = typeof(double); a6.SortMode = DataGridViewColumnSortMode.NotSortable; a6.DataPropertyName = "set_ener"; a6.HeaderText = Language(221); a6.Width = 40; grid.Columns.Add(a6); DataGridViewComboBoxColumn a7 = new DataGridViewComboBoxColumn(); a7.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; a7.SortMode = DataGridViewColumnSortMode.NotSortable; a7.MaxDropDownItems = 20; a7.DataPropertyName = "act_code"; a7.HeaderText = Language(222); a7.ValueMember = "ActionCode"; a7.DisplayMember = "ShowName"; a7.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; grid.Columns.Add(a7); DataGridViewTextBoxColumn a8 = new DataGridViewTextBoxColumn(); a8.ValueType = typeof(double); a8.SortMode = DataGridViewColumnSortMode.NotSortable; a8.DataPropertyName = "set_pres"; a8.HeaderText = Language(223); a8.Width = 40; grid.Columns.Add(a8); DataGridViewTextBoxColumn a9 = new DataGridViewTextBoxColumn(); a9.ValueType = typeof(double); a9.SortMode = DataGridViewColumnSortMode.NotSortable; a9.DataPropertyName = "set_rota"; a9.HeaderText = Language(224); a9.Width = 40; grid.Columns.Add(a9); #endregion DbMCSource dbsource = base.GetAllDbMCSources().FirstOrDefault(); DbHelper dbHelper = NewDbHelper(dbsource.DesignSource); if (dbHelper == null) { return; } #region 初始化动作 if (true) //初始化称量动作 { string sqlstr = "SELECT * FROM PmtAction"; dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; DataTable dt = dbHelper.ToDataTable(); DataRow dr_0 = dt.NewRow(); dr_0["ObjID"] = 0; dr_0["ActionCode"] = string.Empty; dr_0["ShowName"] = string.Empty; dt.Rows.InsertAt(dr_0, 0); a7.DataSource = dt; } #endregion #region 初始化配方条件 if (true) //初始化配方条件 { string sqlstr = "SELECT * FROM PmtTerm"; dbHelper.CommandType = CommandType.Text; dbHelper.ClearParameter(); dbHelper.CommandText = sqlstr; DataTable dt = dbHelper.ToDataTable(); DataRow dr_0 = dt.NewRow(); dr_0["ObjID"] = 0; dr_0["TermCode"] = string.Empty; dr_0["ShowName"] = string.Empty; dt.Rows.InsertAt(dr_0, 0); a2.DataSource = dt; } #endregion } #endregion /// /// 密炼步骤【删除】菜单事件实际处理程序 /// /// private void toolStripMenuItem0_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; for (int i = row.Index; i < grid.Rows.Count; i++) { grid.Rows[i].Cells[0].Value = i + 1; } for (int i = 1; i < grid.ColumnCount; i++) { grid.Rows[row.Index].Cells[i].Value = DBNull.Value; } grid.Rows[row.Index].Cells[0].Value = grid.Rows.Count; } /// /// 密炼步骤【插入】菜单事件处理程序 /// /// private void toolStripMenuItem1_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; #region 取当前行的上一行,目的是在当前行的上一行添加新行 if (row.Index > 0) { row = grid.Rows[row.Index - 1]; } #endregion for (int i = row.Index + 1; i < grid.Rows.Count; i++) { grid.Rows[i].Cells[0].Value = i + 2; } for (int i = 1; i < grid.ColumnCount; i++) { grid.Rows[grid.Rows.Count - 1].Cells[i].Value = DBNull.Value; } grid.Rows[grid.Rows.Count - 1].Cells[0].Value = row.Index + 2; } /// /// 密炼步骤【删除】菜单事件处理程序 /// /// private void toolStripMenuItem2_Click(MCDataGridView grid) { toolStripMenuItem0_Click(grid); } /// /// 密炼步骤【上移】菜单事件处理程序 /// /// private void toolStripMenuItem3_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; if (row.Index == 0) { return; } grid.Rows[row.Index].Cells[0].Value = row.Index; grid.Rows[row.Index - 1].Cells[0].Value = row.Index + 1; } /// /// 密炼步骤【下移】菜单事件处理程序 /// /// private void toolStripMenuItem4_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; if (row.Index == grid.Rows.Count - 1) { return; } grid.Rows[row.Index].Cells[0].Value = row.Index + 2; grid.Rows[row.Index + 1].Cells[0].Value = row.Index + 1; } /// /// 称量【上移】菜单事件处理程序 /// /// private void toolStripMenuItem5_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; if (row.Index == 0) { return; } grid.Rows[row.Index].Cells[0].Value = row.Index; grid.Rows[row.Index - 1].Cells[0].Value = row.Index + 1; } /// /// 称量【下移】菜单事件处理程序 /// /// private void toolStripMenuItem6_Click(MCDataGridView grid) { DataGridViewRow row = grid.SelectedRows[0]; if (row.Index == grid.Rows.Count - 1) { return; } grid.Rows[row.Index].Cells[0].Value = row.Index + 2; grid.Rows[row.Index + 1].Cells[0].Value = row.Index + 1; } /// /// 密炼步骤插入、删除、上移、下移处理 /// /// /// void toolStripMenuItem_Click(object sender, EventArgs e) { MCDataGridView grid = (MCDataGridView)((ContextMenuStrip)(((ToolStripItem)(sender)).Owner)).SourceControl; string ss = ((ToolStripItem)(sender)).Name; if (ss.Equals("ToolStripMenuItem0", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem0_Click(grid); } if (ss.Equals("ToolStripMenuItem1", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem1_Click(grid); //密炼步骤【插入】 } if (ss.Equals("ToolStripMenuItem2", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem2_Click(grid); //密炼步骤【删除】 } if (ss.Equals("ToolStripMenuItem3", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem3_Click(grid); //密炼步骤【上移】 } if (ss.Equals("ToolStripMenuItem4", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem4_Click(grid); //密炼步骤【下移】 } if (ss.Equals("ToolStripMenuItem5", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem5_Click(grid); //称量【下移】 } if (ss.Equals("ToolStripMenuItem6", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem6_Click(grid); //称量【下移】 } if (ss.Equals("ToolStripMenuItem7", StringComparison.CurrentCultureIgnoreCase)) { toolStripMenuItem1_Click(grid); //密炼步骤【插入】 } grid.Sort(grid.Columns[0], System.ComponentModel.ListSortDirection.Ascending); #region 重置序号 for (int i = 0; i < grid.Rows.Count; i++) { grid.Rows[i].Cells[0].Value = i + 1; } grid.AutoScrollOffset = new System.Drawing.Point(0, 0); #endregion } void dataGridView_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { DataGridView dgv = (DataGridView)sender; e.SortResult = Convert.ToInt32(dgv.Rows[e.RowIndex1].Cells[0].Value.ToString()) - Convert.ToInt32(dgv.Rows[e.RowIndex2].Cells[0].Value.ToString()); e.Handled = true; } void dataGridView_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e) { if (e.Button == MouseButtons.Right) { if (e.RowIndex >= 0) { DataGridView dgv = (DataGridView)sender; dgv.ClearSelection(); dgv.Rows[e.RowIndex].Selected = true; dgv.CurrentCell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; } } } private void Is0ToNull(DataGridView dgv, int rowInx, int colInx) { if (rowInx >= 0 && colInx >= 0 && (dgv.Columns[colInx] is DataGridViewTextBoxColumn) && ( ((DataGridViewTextBoxColumn)dgv.Columns[colInx]).ValueType == typeof(double) || ((DataGridViewTextBoxColumn)dgv.Columns[colInx]).ValueType == typeof(decimal) || ((DataGridViewTextBoxColumn)dgv.Columns[colInx]).ValueType == typeof(int))) { if (dgv.Rows[rowInx].Cells[colInx].Value != null && dgv.Rows[rowInx].Cells[colInx].Value != DBNull.Value) { double d = 0.0; if (!double.TryParse(dgv.Rows[rowInx].Cells[colInx].Value.ToString(), out d)) { dgv.CancelEdit(); } else if (d == 0) { dgv.Rows[rowInx].Cells[colInx].Value = DBNull.Value; } } } } void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = (DataGridView)sender; if (dgv.Columns[e.ColumnIndex].DataPropertyName == "child_name") { dgv.Rows[e.RowIndex].Cells[e.ColumnIndex + 1].Value = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; } Is0ToNull(dgv, e.RowIndex, e.ColumnIndex); } void dataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) { DataGridView dgv = (DataGridView)sender; dgv.CancelEdit(); e.Cancel = true; } void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (string.IsNullOrWhiteSpace(e.FormattedValue.ToString())) { return; } DataGridView dgv = (DataGridView)sender; Is0ToNull(dgv, e.RowIndex, e.ColumnIndex); } } }