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上的复选框是否已选中的最佳方法是什么?
答案 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);
}
}
}