12

我想禁用数据网格视图中某些行的选择。

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

谢谢,

4

2 回答 2

16

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

如果 SelectionMode 不是 FullRowSelect,您将需要另外覆盖 SetSelectedCellCore(并且不要为您不想选择的行调用基本 SetSelectedCellCore),因为 SetSelectedRowCore 只有在您单击行标题而不是单个单元格时才会启动。

这是一个例子:

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() 指向新类。

于 2008-09-16T12:22:12.360 回答
-1
Private Sub dgvSomeDataGridView_SelectionChanged(sender As Object, e As System.EventArgs) Handles dgvSomeDataGridView.SelectionChanged
        dgvSomeDataGridView.ClearSelection()
End Sub
于 2013-03-18T10:16:25.580 回答