关于.net:禁用datagridview中的行选择

关于.net:禁用datagridview中的行选择

Disable selection of rows in a datagridview

我想禁用datagridview中某些行的选择。

必须有可能删除winform中显示的datagridview中一个或多个datagridview行的select属性。 目的是用户不能选择某些行。 (取决于条件)

谢谢,


如果SelectionMode为FullRowSelect,则需要为该DataGridView覆盖SetSelectedRowCore,而不要为不需要选择的行调用基本SetSelectedRowCore。

如果SelectionMode不是FullRowSelect,则您将要额外覆盖SetSelectedCellCore(并且不要为不需要选择的行调用基本SetSelectedCellCore),因为SetSelectedRowCore仅在单击行标题而不是单个单元格时才会出现。

这是一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MyDataGridView : DataGridView
{
    protected override void SetSelectedRowCore(int rowIndex, bool selected)
    {
        if (selected && WantRowSelection(rowIndex))
        {
            base.SetSelectedRowCore(rowIndex, selected);
        }
     }

     protected virtual void SetSelectedCellCore(int columnIndex, int rowIndex, bool selected)
     {
         if (selected && WantRowSelection(rowIndex))
         {
            base.SetSelectedRowCore(rowIndex, selected);
          }
     }

     bool WantRowSelection(int rowIndex)
     {
        //return true if you want the row to be selectable, false otherwise
     }
}

如果您使用的是WinForms,请针对相关表单打开designer.cs,并更改DataGridView实例的声明以使用此新类而不是DataGridView,并替换this.blahblahblah = new System.Windows.Forms。 DataGridView()指向新类。


1
2
3
Private Sub dgvSomeDataGridView_SelectionChanged(sender As Object, e As System.EventArgs) Handles dgvSomeDataGridView.SelectionChanged
        dgvSomeDataGridView.ClearSelection()
End Sub

推荐阅读