解决DataGridView中的CheckBox偶尔不更新DataTable中的bool值的方法

问题描述

假设存在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);
    }
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×