我在 C# 3.5 的 WinForm 应用程序中有一个 DataGridView。
AllowUserToAddNewRow
属性设置为真。当用户在 DataGridView 中键入任何文本时,会自动将另一个新行添加到 DataGridView。在对当前行执行一些检查并且在那里填写所有必要信息之前,我不希望添加这个新行。
示例:我有一个带有空白行的 DataGridView:
当我开始输入一个新行时,这还为时过早:
我想要的是仅在用户输入数量后才添加新行:
我在 C# 3.5 的 WinForm 应用程序中有一个 DataGridView。
AllowUserToAddNewRow
属性设置为真。当用户在 DataGridView 中键入任何文本时,会自动将另一个新行添加到 DataGridView。在对当前行执行一些检查并且在那里填写所有必要信息之前,我不希望添加这个新行。
示例:我有一个带有空白行的 DataGridView:
当我开始输入一个新行时,这还为时过早:
我想要的是仅在用户输入数量后才添加新行:
Set AllowUserToAddNewRow = false 现在首先向您的数据源添加一个空白行,例如。如果您将 DataGridView 绑定到名为 DT 的 DataTable,那么就在之前
dataGridView1.DataSource = DT;
做类似的事情
DT.Rows.Add(DT.NewRow());
这是最初有一个空白行,以便可以输入第一条记录。然后处理事件 dataGridView1.CellEndEdit,在该事件中编写如下内容:
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 1)//The index of your Quantity Column
{
int qty = (int)DT.Rows[e.RowIndex][e.ColumnIndex];
if (qty > 0)//Your logic if required
{
DT.Rows.Add(DT.NewRow());
}
}
}
基本上,这是一个简单的游戏,包含一些事件并启用/禁用 AllowUserToAddRow 属性:
public Form1()
{
InitializeComponent();
//creating a test DataTable and adding an empty row
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Rows.Add(dt.NewRow());
//binding to the gridview
dataGridView1.DataSource = dt;
//Set the property AllowUserToAddRows to false will prevent a new empty row
dataGridView1.AllowUserToAddRows = false;
}
现在事件...当单元格识别编辑时,它将触发一个名为 CellBeginEdit 的事件。当它处于编辑模式时,将 AllowUserToAddRows 设置为 false
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
dataGridView1.AllowUserToAddRows = false;
}
当单元格识别到编辑结束时,它将触发一个名为 CellEndEdit 的事件。当它结束编辑模式时,请检查您的条件。根据结果将 AllowUserToAddRows 设置为 true 或将其保持为 false。
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//instead of MessageBox there could be as well your check conditions
if (MessageBox.Show("Cell edit finished, add a new row?", "Add new row?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
dataGridView1.AllowUserToAddRows = true;
else dataGridView1.AllowUserToAddRows = false;
}
我知道这是旧的。最简单的方法是,从设计视图中取消选中“启用添加”
这就是它的实现方式。
a) 您可以使用 RowLeave 事件检查当前行的内容
String.IsNullOrWhiteSpace(GridPGLog.Rows[e.RowIndex].Cells[0].value.toString())
using (or) Cells[0] || cells[1] || cell[2] || ..
如果发现任何错误,将焦点设置到错误单元格并强制用户输入数据。
DataGridViewRow rowToSelect = this.dgvJobList.CurrentRow;
rowToSelect.Selected = true;
rowToSelect.Cells[0].Selected = true;
this.dgvJobList.CurrentCell = rowToSelect.Cells[0];
b) 或者您可以放置一个保存按钮并使用 foreach 循环检查所有新添加的行
I think on the event CellClick you can check in which column you are and then add a new row, something like : DataGridView1.Rows.Add()