我有一个绑定到IEnumerable的DGV。 T有一个布尔属性,可以获取/设置。加载表时,将访问get属性以填充DataGridViewCheckboxColumn。我可以看到它在调试器中被击中。当我单击复选框列中的单元格时,将按照您的预期检查复选框,但不会更新基础数据源,并且不会调用属性设置器。复选框列的ReadOnly属性设置为false。
如何更新底层绑定数据?
polygonListBindingSource.DataSource = m_displayPolygons.OrderBy(p => p.Name);
我见过相关的问题,但他们的答案并不一致。有人建议在DGV上调用EndEdit,其他建议在绑定源上调用它。我是否真的必须订阅一个事件,以便将单元格值更改为实际将更改提交到基础数据类型?这似乎不自然。
答案 0 :(得分:0)
这归结于DataGridView
仅在当前单元格失去焦点时才提交其编辑的事实。单击复选框不足以提交编辑。
标准是这样做是为了使用事件,通常是CurrentCellDirtyStateChanged
事件:
void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
这有点不自然但是设计 - 这样你的数据源不会被可能不是最终的编辑所淹没。对于复选框而言,这不一定是一个大问题,但对于文本框单元格而言,这是一个值得设计的决定