问题描述
假设存在DataGridView
的实例DgvData
,有这么一段代码:
private readonly DataTable _data = new DataTable();
private void InitDataTable()
{
_data.Columns.Add("设备号", typeof(string)).ReadOnly = true;
_data.Columns.Add("名称", typeof(string)).ReadOnly = true;
_data.Columns.Add("数据质量", typeof(bool));
DgvData.DataSource = _data;
}
按照设想,我们在界面上点击DgvData
中数据质量
列中的CheckBox
时,应该可以更新DataTable
中的对应列的值。可事实上,有的时候可以,有的时候不行。
解决方法
处理DataGridView.CurrentCellDirtyStateChanged
事件,提交点击CheckBox
的处理。
private void InitDataTable()
{
_data.Columns.Add("设备号", typeof(string)).ReadOnly = true;
_data.Columns.Add("名称", typeof(string)).ReadOnly = true;
_data.Columns.Add("数据质量", typeof(bool));
DgvData.DataSource = _data;
DgvData.CurrentCellDirtyStateChanged += DgvData_CurrentCellDirtyStateChanged;
}
private void DgvData_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (DgvData.IsCurrentCellDirty)
{
DgvData.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}