【问题标题】:DataGridViewCheckboxColumn not setting underlying dataDataGridViewCheckboxColumn 未设置基础数据
【发布时间】:2012-08-30 11:34:14
【问题描述】:

我有一个绑定到 IEnumerable 的 DGV。 T 有一个可以获取/设置的布尔属性。加载表时,访问 get 属性以填充 DataGridViewCheckboxColumn。我可以看到它在调试器中被击中。当我单击复选框列中的一个单元格时,复选框会按您的预期被选中,但基础数据源没有更新,并且没有调用属性设置器。复选框列的 ReadOnly 属性设置为 false。

我怎样才能得到它来更新底层绑定数据?

polygonListBindingSource.DataSource = m_displayPolygons.OrderBy(p => p.Name);

我看过相关的问题,但他们的答案并不一致。一些建议在 DGV 上调用 EndEdit,另一些建议在绑定源上调用它。当单元格值更改以实际提交对基础数据类型的更改时,我真的必须订阅一个事件吗?这似乎不自然。

【问题讨论】:

    标签: winforms .net-3.5 datagridview datagridviewcheckboxcell


    【解决方案1】:

    这是因为DataGridView 仅在当前单元格失去焦点时才提交其编辑。单击复选框不足以提交编辑。

    这样做的标准是使用事件,通常是CurrentCellDirtyStateChanged 事件:

    void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
    {
        if (dataGridView1.IsCurrentCellDirty)
        {
            dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
        }
    }
    

    这有点不自然,但这是设计使然 - 这样您的数据源就不会被可能不是最终版本的编辑淹没。对于复选框而言,这不一定是一件大事,但对于文本框单元格而言,这是一个值得的设计决策。

    【讨论】:

    • 谢谢,您的解释很有道理。另外,我意识到我没有将数据封装在 BindingList 中,因此似乎 DataSource 的引用正在更新,但不是原始的“源”IEnumerable。一旦我这样做了,并按照您的描述提交了编辑,我就会得到预期的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多