DataGridViewCheckboxColumn未设置基础数据

时间:2012-08-30 11:34:15

标签: winforms .net-3.5 datagridview datagridviewcheckboxcell

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

如何更新底层绑定数据?

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

我见过相关的问题,但他们的答案并不一致。有人建议在DGV上调用EndEdit,其他建议在绑定源上调用它。我是否真的必须订阅一个事件,以便将单元格值更改为实际将更改提交到基础数据类型?这似乎不自然。

1 个答案:

答案 0 :(得分:0)

这归结于DataGridView仅在当前单元格失去焦点时才提交其编辑的事实。单击复选框不足以提交编辑。

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

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

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