我正在尝试使datagridview复选框矩阵以特定方式工作。 强制性要求是。
程序在启动期间正在读取文件,并且正在创建行,其中5列中的3列是复选框列。我喜欢让它以这样的方式工作,即每行只能选择一个勾选框,并且无法完全取消选择勾选框,因此不会选择任何行。
目前为了确保每行只选择一个复选框我正在使用此代码:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
for (int i = 0; i <= 2; i++)
{
dataGridView1.Rows[e.RowIndex].Cells[i].Value = false;
}
}
然而,正如您所看到的第2-3行没有选择任何内容。如何阻止取消选中复选框但是能够检查行中的其他框?
答案 0 :(得分:0)
不确定你想要什么,但可以试试这个:
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.Rows[e.RowIndex].Cells[e.CellIndex].Value == false)
{
for (int i = 0; i <= 2; i++)
{
if (i != e.cellIndex)
dataGridView1.Rows[e.RowIndex].Cells[i].Value = false;
}
}
}
答案 1 :(得分:0)
原来问题不仅仅是代码只有DataGridView属性“EditMode”。一旦我将其从默认的“EditOnKeystrokeOrF2”更改为“EditProgrammatically”,一切都按预期工作。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//on click reset whole row
for (int i = 0; i <= 2; i++)
{
dataGridView1.Rows[e.RowIndex].Cells[i].Value = false;
}
// at the end make only last clicked cell "true"
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = true;
//check if no atempt to uncheck checked cell
if (Convert.ToBoolean(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value) == true)
{
dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = true;
}
}