/// <summary> /// 插入一行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks></remarks> private void InsertRow(object sender, EventArgs e) { myDataGridView with_1 = this; int SelectedIndex = with_1.SelectedRows[0].Index; with_1.Rows.Insert(SelectedIndex, 1); }
private void myDataGridViewBOM_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == SystemConst.GridKeysEnter) { myDataGridView dgv = sender as myDataGridView; DataGridViewCell cell = dgv.CurrentCell; GridKeyEnter(dgv, cell, true); } }
public virtual void dataGridViewDetail_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == SystemConst.GridKeysEnter) { myDataGridView dgv = sender as myDataGridView; DataGridViewCell cell = dgv.CurrentCell; GridKeyEnter(dgv, cell, true); } }
private void myDataGridViewBOM_DataError(object sender, DataGridViewDataErrorEventArgs e) { myDataGridView dgv = (myDataGridView)sender; string colName = dgv.Columns[e.ColumnIndex].Name; if (colName == "数量") { e.Cancel = false; } }
private void myDataGridViewBOM_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (!bCellEndEdit) { return; } myDataGridView dgv = sender as myDataGridView; DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex]; GridKeyEnter(dgv, cell, false); }
public virtual void dataGridViewDetail_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (!bCellEndEdit) { return; } myDataGridView dgv = sender as myDataGridView; DataGridViewCell cell = dgv[e.ColumnIndex, e.RowIndex]; GridKeyEnter(dgv, cell, false); }
/// <summary> /// 移除一行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks></remarks> private void RemoveRow(object sender, EventArgs e) { myDataGridView with_1 = this; var Row = with_1.SelectedRows[0]; if (Row.Index < with_1.Rows.Count - 1) { //当删除最后一行(不带数据,自动添加的行)时会报错:无法删除未提交的新行。 with_1.Rows.Remove(Row); } }
/// <summary> /// 验证品名规格型号合法性 /// </summary> /// <param name="dgv"></param> /// <param name="cell"></param> /// <returns></returns> private bool validate品名规格型号(myDataGridView dgv, DataGridViewCell cell) { if (dgv.Rows[cell.RowIndex].Cells["手册id"].Value == DBNull.Value || Convert.ToInt32(dgv.Rows[cell.RowIndex].Cells["手册id"].Value) <= 0) { SysMessage.InformationMsg("请先选择手册编号!"); return(false); } string strSQL = string.Empty; strSQL = string.Format("SELECT 进口料件id, 商品编号, 品名规格型号, 单位 FROM 进口料件表 where 手册id={0} and 品名规格型号 like '%{1}%'", dgv.Rows[cell.RowIndex].Cells["手册id"].Value, StringTools.SqlLikeQ(cell.EditedFormattedValue.ToString())); IDataAccess dataAccess = DataAccessFactory.CreateDataAccess(DataAccessEnum.DataAccessName.DataAccessName_Uniquegrade); dataAccess.Open(); DataTable dtData = dataAccess.GetTable(strSQL, null); dataAccess.Close(); if (dtData.Rows.Count == 1) { DataRow row = dtData.Rows[0]; dgv.Rows[cell.RowIndex].Cells["进口料件id"].Value = row["进口料件id"]; dgv.Rows[cell.RowIndex].Cells["商品编号"].Value = row["商品编号"]; dgv.Rows[cell.RowIndex].Cells["单位"].Value = row["单位"]; dgv.Rows[cell.RowIndex].Cells["品名规格型号"].Value = row["品名规格型号"]; } else if (dtData.Rows.Count > 1) { FormBaseSingleSelect formSelect = new FormBaseSingleSelect(); formSelect.strFormText = "选择资料"; formSelect.dtData = dtData; if (formSelect.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dgv.Rows[cell.RowIndex].Cells["进口料件id"].Value = formSelect.returnRow["进口料件id"]; dgv.Rows[cell.RowIndex].Cells["商品编号"].Value = formSelect.returnRow["商品编号"]; dgv.Rows[cell.RowIndex].Cells["单位"].Value = formSelect.returnRow["单位"]; dgv.Rows[cell.RowIndex].Cells["品名规格型号"].Value = formSelect.returnRow["品名规格型号"]; } else { dgv.CurrentCell = cell; return(false); } } else { SysMessage.InformationMsg("此商品编号不存在!"); dgv.CurrentCell = cell; return(false); } return(true); }
/// <summary> /// 移除多行 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <remarks></remarks> private void ToolStripMenuItemRemoveRows_Click(object sender, EventArgs e) { myDataGridView with_1 = this; //下面的 For Each 是从下往上索引的,即前面的Row对象的index的值大于后面的Index的值 foreach (DataGridViewRow Row in with_1.SelectedRows) { if (Row.Index < with_1.Rows.Count - 1) { //当删除最后一行(不带数据,自动添加的行)时会报错:无法删除未提交的新行。 with_1.Rows.Remove(Row); } } }
/// <summary> /// 验证数量合法性 /// </summary> /// <param name="dgv"></param> /// <param name="cell"></param> /// <returns></returns> private void validate数量(myDataGridView dgv, DataGridViewCell cell) { if (cell.EditedFormattedValue.ToString() == "") { dgv.Rows[cell.RowIndex].Cells["数量"].Value = DBNull.Value; } else { try { decimal.Parse(cell.EditedFormattedValue.ToString()); dgv.Rows[cell.RowIndex].Cells["数量"].Value = Convert.ToDecimal(cell.EditedFormattedValue); } catch { dgv.Rows[cell.RowIndex].Cells["数量"].Value = 0; } } }
private void validate日期(myDataGridView dgv, DataGridViewCell cell) { if (cell.EditedFormattedValue.ToString() == "") { dgv.Rows[cell.RowIndex].Cells["日期"].Value = DBNull.Value; } else { try { Convert.ToDateTime(cell.EditedFormattedValue.ToString()); dgv.Rows[cell.RowIndex].Cells["日期"].Value = Convert.ToDateTime(cell.EditedFormattedValue).ToString("yyyy-MM-dd"); } catch { dgv.Rows[cell.RowIndex].Cells["日期"].Value = DBNull.Value; } } }
/// <summary> /// 验证手册编号合法性 /// </summary> /// <param name="dgv"></param> /// <param name="cell"></param> /// <returns></returns> private bool validate手册编号(myDataGridView dgv, DataGridViewCell cell) { string strSQL = string.Empty; strSQL = string.Format("SELECT 手册id, 手册编号, 有效期限, 进出口岸一 FROM 手册资料表 where 手册编号 like '%{0}%'", StringTools.SqlLikeQ(cell.EditedFormattedValue.ToString())); IDataAccess dataAccess = DataAccessFactory.CreateDataAccess(DataAccessEnum.DataAccessName.DataAccessName_Uniquegrade); dataAccess.Open(); DataTable dtData = dataAccess.GetTable(strSQL, null); dataAccess.Close(); if (dtData.Rows.Count == 1) { DataRow row = dtData.Rows[0]; dgv.Rows[cell.RowIndex].Cells["手册id"].Value = row["手册id"]; dgv.Rows[cell.RowIndex].Cells["手册编号"].Value = row["手册编号"]; } else if (dtData.Rows.Count > 1) { FormBaseSingleSelect formSelect = new FormBaseSingleSelect(); formSelect.strFormText = "选择资料"; formSelect.dtData = dtData; if (formSelect.ShowDialog() == System.Windows.Forms.DialogResult.OK) { dgv.Rows[cell.RowIndex].Cells["手册id"].Value = formSelect.returnRow["手册id"]; dgv.Rows[cell.RowIndex].Cells["手册编号"].Value = formSelect.returnRow["手册编号"]; } else { dgv.CurrentCell = cell; return(false); } } else { SysMessage.InformationMsg("此手册编号不存在!"); dgv.CurrentCell = cell; return(false); } return(true); }
private void validate备注(myDataGridView dgv, DataGridViewCell cell) { dgv["备注", cell.RowIndex].Value = cell.EditedFormattedValue; //如果当前行的商品编号为空,则跳转到当前行的商品编号 if (dgv.Rows[cell.RowIndex].Cells["商品编号"].Value == DBNull.Value || dgv.Rows[cell.RowIndex].Cells["商品编号"].Value.ToString().Trim() == "") { dgv.CurrentCell = dgv["商品编号", cell.RowIndex]; } else { //否则跳转到下一行的产品编号,如果是最后一行,则新增一行 if (cell.RowIndex == dgv.Rows.Count - 1) { dtBOMAddRow(); dgv.CurrentCell = dgv["商品编号", cell.RowIndex + 1]; } else { dgv.CurrentCell = dgv["商品编号", cell.RowIndex + 1]; } } }
/// <summary> /// GRID的回车事件 /// </summary> /// <param name="dgv">Grid对象</param> /// <param name="cell">焦点CELL</param> /// <param name="bKeyEnter">是否按回车触发的事件</param> private void GridKeyEnter(myDataGridView dgv, DataGridViewCell cell, bool bKeyEnter) { if (!bCellKeyPress) { return; } string colName = dgv.Columns[cell.ColumnIndex].Name; switch (colName) { case "手册编号": //跳转到商品编号 #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["手册编号"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["商品编号", cell.RowIndex]; bCellEndEdit = true; } else if (validate手册编号(dgv, cell)) { //dtModifyAfterHead.Rows[cell.RowIndex].EndEdit(); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["商品编号", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["手册编号"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate手册编号(dgv, cell); } } #endregion break; case "商品编号": //跳转数量 #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["商品编号"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["数量", cell.RowIndex]; bCellEndEdit = true; } else if (validate商品编号(dgv, cell)) { //dtModifyAfterHead.Rows[cell.RowIndex].EndEdit(); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["数量", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["商品编号"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate商品编号(dgv, cell); } } #endregion break; case "品名规格型号": //跳转数量 #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["品名规格型号"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["数量", cell.RowIndex]; bCellEndEdit = true; } else if (validate品名规格型号(dgv, cell)) { //dtModifyAfterHead.Rows[cell.RowIndex].EndEdit(); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["数量", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["品名规格型号"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate品名规格型号(dgv, cell); } } #endregion break; case "数量": //跳转到备注 #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["数量"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["备注", cell.RowIndex]; bCellEndEdit = true; } else { validate数量(dgv, cell); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["备注", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["数量"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate数量(dgv, cell); } } #endregion break; case "备注": #region CELL回车跳转 if (bKeyEnter) { validate备注(dgv, cell); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); } #endregion break; case "项号": //跳转到"商品编号" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["商品编号", cell.RowIndex]; } #endregion break; case "单位": //跳转到"备注" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["备注", cell.RowIndex]; } #endregion break; } }
private void GridKeyEnter(myDataGridView dgv, DataGridViewCell cell, bool bKeyEnter) { if (!bCellKeyPress) { return; } string colName = dgv.Columns[cell.ColumnIndex].Name; switch (colName) { case "序号": //跳转到"产品编号" #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["序号"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["产品编号", cell.RowIndex]; bCellEndEdit = true; } else { validate序号(dgv, cell); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["产品编号", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["序号"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate序号(dgv, cell); } } #endregion break; case "产品编号": //跳转到"商品编码" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["商品编码", cell.RowIndex]; } #endregion break; case "商品编码": //跳转到"商品名称" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["商品名称", cell.RowIndex]; } #endregion break; case "商品名称": //跳转到"商品规格" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["商品规格", cell.RowIndex]; } #endregion break; case "商品规格": //跳转到"单价" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["单价", cell.RowIndex]; } #endregion break; case "单价": //跳转到"币种" #region CELL回车跳转 if (bKeyEnter) { if (dgv.CurrentRow.Cells["单价"].Value.ToString() == cell.EditedFormattedValue.ToString()) { bCellEndEdit = false; dgv.CurrentCell = dgv["币种", cell.RowIndex]; bCellEndEdit = true; } else { validate单价(dgv, cell); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); bCellEndEdit = false; dgv.CurrentCell = dgv["币种", cell.RowIndex]; bCellEndEdit = true; } } else { if (dgv.CurrentRow.Cells["单价"].Value.ToString() != cell.EditedFormattedValue.ToString()) { validate单价(dgv, cell); } } #endregion break; case "币种": //跳转到"计量单位" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["计量单位", cell.RowIndex]; } #endregion break; case "计量单位": //跳转到"法定单位" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["法定单位", cell.RowIndex]; } #endregion break; case "法定单位": //跳转到"换算因子" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["换算因子", cell.RowIndex]; } #endregion break; case "换算因子": //跳转到"对应编号" #region CELL回车跳转 if (bKeyEnter) { dgv.CurrentCell = dgv["对应编号", cell.RowIndex]; } #endregion break; case "对应编号": //跳转到"序号" #region CELL回车跳转 if (bKeyEnter) { validate对应编号(dgv, cell); (dgv.CurrentRow.DataBoundItem as DataRowView).Row.EndEdit(); } #endregion break; } }
public virtual void GridKeyEnter(myDataGridView dgv, DataGridViewCell cell, bool bKeyEnter) { }