0

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

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

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

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

4

1 回答 1

0

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

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

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

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

于 2012-08-30T12:03:11.350 回答