2008-09-16 6 views
12

Я хочу отключить выделение определенных строк в datagridview.Отключить выбор строк в datagridview

Должно быть возможно удалить свойство select для одной или нескольких строк datagridview в представлении datagridview, показанном в winform. Цель состоит в том, что пользователь не может выбирать определенные строки. (В зависимости от состояния)

Thankx,

+0

Для тех, кто нашел этот вопрос, чтобы узнать, как отключить выбор строк на все: набор `SelectionMode` свойство` CellSelect` – Pavel 2017-02-07 16:00:36

ответ

16

Если SelectionMode является FullRowSelect, то вам необходимо переопределить SetSelectedRowCore для этого DataGridView, а не вызывать базовый 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(), чтобы указать на новый класс.

+0

решение, которое работает ... Но для этого я думаю, что нам нужно создать Класс, который расширяет управление datagridview ... Am I Right ... У нас нет решения, которое работает с текущим классом datagridview – 2010-03-31 11:34:41

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