取消选择DataGridView上的所有行

时间:2010-09-14 10:07:43

标签: c# .net winforms datagridview

有人知道如何取消选择Windows窗体DataGridView控件上的所有行吗?默认情况下,始终选择第一行...
另外,我不想允许任何选择,你们知道任何方法吗?

我已经在这里搜索但找不到......

任何帮助都会很棒!

修改 好的,我找到了另一种取消选择行的方法:在DataGridViewRow.RowPostPaint()事件上,使用Selected属性取消选择发送事件的行。

private void grid_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    this.gridLogEntries.Rows[e.RowIndex].Selected = false;
}

5 个答案:

答案 0 :(得分:2)

我认为没有像DisableSelection = true这样的简单解决方案。

无论如何,以下列方式处理SelectionChanged事件应该足够了:

private bool skipEvents;

void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
    if (skipEvents)
        return;

    skipEvents = true;

    // disable cell selection
    foreach (DataGridViewCell cell in this.dataGridView1.SelectedCells)
        cell.Selected = false;
    // disable row selection
    foreach (DataGridViewRow row in this.dataGridView1.SelectedRows)
        row.Selected = false;
    // disable column selection
    foreach (DataGridViewColumn col in this.dataGridView1.SelectedColumns)
        col.Selected = false;

    skipEvents = false;
}

修改

我稍微更改了代码以避免对方法进行递归调用。

答案 1 :(得分:1)

datagridview1.clearselection()

这将只在一个语句中解决问题,无需循环

答案 2 :(得分:1)

尝试禁用制表位选项,这对我来说也适用于类似的问题

答案 3 :(得分:0)

你试过这个吗?

myTable.CurrentRowIndex = -1;

答案 4 :(得分:0)

您可以尝试为每个选定的行调用取消选择方法:

        for (int i = 0; i < bindingSource1.Count; i++)
        {
            if (myGrid.IsSelected(i))
            {
                myGrid.UnSelect(i);
            }
        }