【问题标题】:Dynamically set DataGridViewColumn default value at runtime在运行时动态设置 DataGridViewColumn 默认值
【发布时间】:2011-04-26 16:03:11
【问题描述】:

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

什么给了?提前致谢。

【问题讨论】:

    标签: .net winforms datagridview


    【解决方案1】:

    您的问题来自于 UserAddedRow 事件为 template 行(位于最底部的行,用于向网格添加新行)触发 - 您设置了正确的值,但对于行错了。

    解决您的问题的简单方法:

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

    【讨论】:

    • 这很好用,但有一个奇怪的副作用。仅当我输入 ID 单元格或添加新行时才会刷新该值。我正试图弄清楚要调用哪个事件,但是该死的太多了……
    • 此时datagridview已经绑定。也许我需要重新绑定它...stackoverflow.com/questions/1516252/…
    • @krs1: RowValidated 事件应该是您正在寻找的。​​span>
    猜你喜欢
    • 2018-01-16
    • 2019-04-14
    • 2013-11-15
    • 2011-05-14
    • 2011-11-03
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多