winforms 在DataGridView中使用复选框选择行

u2nhd7ah  于 2023-10-23  发布在  其他
关注(0)|答案(2)|浏览(135)

我有一个带有CheckBox列的Datagrid。我需要从这个数据网格中选择多个行,并将SelectedList传递到另一个窗体。我需要的是,当我选中复选框时,所有选中的行必须仍然选中(蓝色高亮),直到我将它们传递到另一个表单。我现在就可以做了,但是只针对一行,选中的一行,

private void button2_Click(object sender, EventArgs e)
    {                      
        DataTable table = new DataTable();
        foreach (DataGridViewColumn column in dataGridView1.Columns)
        {
            table.Columns.Add(column.Name, typeof(string)); //tipo cell??
        }
        for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
        {
           table.Rows.Add();

            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                table.Rows[i][j] = dataGridView1.SelectedRows[i].Cells[j].Value;
                fph.dataGridView1.DataSource = table; //DATAGRID DO FORM PH 
            }
        }
    }

谢谢大家!

u0sqgete

u0sqgete1#

单击一个项目选择它并取消选择所有其他项目。这是标准行为。遵循GUI标准的最明显的方法是,如果用户不想失去当前的选择,就像他们在系统中的其他任何地方一样,让他们按下control
如果你不喜欢这样,你要么找到一些奇怪的技巧,要么在每次CellMouseDown检查这是否是复选框列,然后存储选定的行并在CellMouseUp上恢复选择。(或者类似的东西,这里没有时间为你测试这个。)

cgvd09ve

cgvd09ve2#

我知道这是一个非常古老的问题,但没有其他答案,我可以找到。
实现此功能的技巧是在CellMouseUP事件上保存DataGridView. SelectedView。然后使用CellContentChanged事件或类似事件来实际处理该选择。
因此,用户可以进行多项选择。当他们在进行此选择时释放鼠标时,它被保存。然后他们去点击一个复选框或其他东西,这将清除dgv选择只有一行。但您使用保存的选择来实际进行更改。新的单行选择仅在进行更改后释放鼠标时保存。

相关问题