我有一个DataGridView控件,用于编辑/更新/删除数据库中单个表的记录。我已重写DataGridView控件以添加以下内容:
private int employeeID;
public int DefaultEmployeeID
{
get { return employeeID; }
set { employeeID = value; }
}
protected override void OnUserAddedRow(DataGridViewRowEventArgs e)
{
e.Row.Cells[0].Value = employeeID;
base.OnUserAddedRow(e);
}
当用户从数据库加载不同的员工时,DefaultEmployeeID属性将设置为员工的ID。我知道OnUserRowAdded事件正在正常触发,employeeID被设置为正确的值,而我肯定我有正确的单元格。但是,该值仍设置为0.
是什么给出的?提前谢谢。
答案 0 :(得分:1)
您的问题来自于UserAddedRow
事件触发模板行(最底部的那一行,用于向网格添加新行) - 您设置了正确的值,但对于错误的行。
解决问题的简单方法:
protected override void OnUserAddedRow(DataGridViewRowEventArgs e)
{
// get the index for "1 before last row" - the one which you in fact edit/add
int actualRowIndex = this.Rows.Count - 2;
this.Rows[actualRowIndex].Cells[0].Value = employeeID;
base.OnUserAddedRow(e);
}
我运行这个简单的例子来说明我正在谈论的行。一旦用户开始输入模板行(左图),它就会变成常规行并插入新模板行,这就是事件args中的那一行(右图)。