c #datagridview复选框矩阵

时间:2017-08-18 09:47:30

标签: c# winforms datagridview

我正在尝试使datagridview复选框矩阵以特定方式工作。 强制性要求是。

  1. 只能选择datagridview行中的一个复选框。
  2. 必须选择每行一个复选框。
  3. 程序在启动期间正在读取文件,并且正在创建行,其中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行没有选择任何内容。如何阻止取消选中复选框但是能够检查行中的其他框?

    enter image description here

2 个答案:

答案 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;
                 }


    }