检查是否选中了dataGridView复选框失败

时间:2018-10-31 07:14:44

标签: c# winforms datagridview

here这样的问题有一个答案,但是我的问题是为什么这样做代码不起作用,所以请不要将其标记为“重复”这个问题

所以我有一个dataGridView,其中有一个复选框。因此,当我选中并取消选中此框时,我希望发生一些事情,以便这样做:

private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
     Trace.WriteLine("Cell Content Click Col: " + e.ColumnIndex + " Row: " + e.RowIndex);

     if(e.ColumnIndex==0) //0 is the column of the checkbox
     {
       Trace.WriteLine("Value:"+  dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
     }
}

如您所见,我正在应用另一个问题的答案。但是结果是无论我是否选中该框,该值始终为 false。

我将使用CellValidating尝试此方法,以查看是否获得更好的结果,但是检查dataGridView上的复选框是否已选中的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

来自this answer,与您在问题中发布的链接相同:

DataGridView中对值进行编辑之后,应首先提交更改,以便正确更新表中的内部值:

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

只有这样,您才能正确查询复选框的状态:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;

    if (dgv.Rows.Count >= e.RowIndex + 1)
    {
        bool isChecked = (bool)dgv.Rows[e.RowIndex].Cells["CheckColumn"].Value;
        MessageBox.Show(string.Format("Row {0} is {1}", e.RowIndex, isChecked));
    }
}

答案 1 :(得分:0)

private void dataGridView2_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    Trace.WriteLine("Cell Content Click Col: " + e.ColumnIndex + " Row: " + e.RowIndex);

    if (e.ColumnIndex == 0)
    {
        DataGridViewCheckBoxCell cell = dataGridView2.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewCheckBoxCell;
        if (cell != null)
        {
            Trace.WriteLine("Value:" + cell.EditingCellFormattedValue);
        }
    }
}