DataGridView使用ctrl和shift键检查多个复选框



我在另一个论坛上发现了完全相同的问题。不幸的是,没有给出解决方案。我是这个论坛的新手,已经提交了另外2个帖子,但遗憾的是没有人回应他们。希望这个能引起更多的注意。提前谢谢。

"我有一个DataGridView,列0是一个复选框。我已经启用了多选,所以我可以用Shift和Ctrl选择行,但不能让我的复选框正确启用和禁用。我希望能够选择行,然后一旦选中,点击第0列,所有行都选中或未选中,但实际情况是,当我这样做时,我失去了选择。目前所有内容都是只读的,除了第0列和我有FullRowSelect启用。">

我也尝试了CellClick事件,这是我的偏好。

我的代码如下:
private void dgv_Off_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex == -1) return;
dgv_On.ClearSelection();
int colindex = dgv_Off.CurrentCell.ColumnIndex;
if (dgv_Off.SelectedRows.Count > 1)
{
foreach (DataGridViewRow dgvOff in dgv_Off.SelectedRows)
{
dgv_Off.Focus();
if (colindex == 0)
{
bool IsChecked = Convert.ToBoolean(dgvOff.Cells[0].Value);
if (IsChecked == true)
{
dgvOff.Cells[0].Value = false;
dgv_Off.ClearSelection();
dgv_Off.Update();
}
else
{
dgvOff.Cells[0].Value = true;
dgv_Off.ClearSelection();
dgv_Off.Update();
}
}
}
}
dgv_Off.CommitEdit(DataGridViewDataErrorContexts.Commit);
}

我没有完全按照你的意思…"我希望能够选择行,然后一旦选择单击列0,并有所有行选中或未选中,…"…?你如何决定选中的行应该被选中还是不被选中?我的意思是,如果选定的行选中和未选中的值选择…那么你怎么知道什么值设置所有的复选框?

我将假设你想改变"选定"行复选框的值为"相反"的值,它目前有。换句话说,对于选中的行,我们将循环遍历所有选中的复选框,并仅对选中的行取消复选框值。如果是这种情况,那么下面的代码应该这样做。

我建议您使用栅格ColumnHeaderMouseClick事件。当单击的列标头为第0列(0)时,则循环遍历所有选定的行,并取消复选框当前具有的任何值。

private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) {
if (e.ColumnIndex == 0) {
foreach (DataGridViewRow row in dataGridView1.SelectedRows) {
if (row.Cells[0].Value != null) {
row.Cells[0].Value = !(bool)row.Cells[0].Value;
}
else {
row.Cells[0].Value = true;
}
}
}
}

最新更新