在运行时动态设置DataGridViewColumn默认值

时间:2011-04-26 16:03:12

标签: .net winforms datagridview

我有一个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.

是什么给出的?提前谢谢。

1 个答案:

答案 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中的那一行(右图)。

Image illustrting which rows gets carried within event args