我有一个带有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
}
}
}
谢谢大家!
2条答案
按热度按时间u0sqgete1#
单击一个项目选择它并取消选择所有其他项目。这是标准行为。遵循GUI标准的最明显的方法是,如果用户不想失去当前的选择,就像他们在系统中的其他任何地方一样,让他们按下control。
如果你不喜欢这样,你要么找到一些奇怪的技巧,要么在每次CellMouseDown检查这是否是复选框列,然后存储选定的行并在CellMouseUp上恢复选择。(或者类似的东西,这里没有时间为你测试这个。)
cgvd09ve2#
我知道这是一个非常古老的问题,但没有其他答案,我可以找到。
实现此功能的技巧是在CellMouseUP事件上保存DataGridView. SelectedView。然后使用CellContentChanged事件或类似事件来实际处理该选择。
因此,用户可以进行多项选择。当他们在进行此选择时释放鼠标时,它被保存。然后他们去点击一个复选框或其他东西,这将清除dgv选择只有一行。但您使用保存的选择来实际进行更改。新的单行选择仅在进行更改后释放鼠标时保存。