2008-09-16 7 views
12

Ich möchte die Auswahl bestimmter Zeilen in einer Datagridview deaktivieren.Deaktivieren der Auswahl von Zeilen in einer Datagridview

Es muss möglich sein, die select -Eigenschaft für eine oder mehrere datagridview-Zeilen in einer Datagridview, die in einem WinForm angezeigt wird, zu entfernen. Das Ziel ist, dass der Benutzer bestimmte Zeilen nicht auswählen kann. (Abhängig von einer Bedingung)

Thankx,

+0

Für diejenigen, die diese Frage gefunden zu wissen, wie Zeilen Auswahl überhaupt zu deaktivieren: Satz 'SelectionMode' Eigenschaft' CellSelect' – Pavel

Antwort

16

Wenn selection FullRowSelect ist, dann werden Sie SetSelectedRowCore für das Datagridview außer Kraft setzen müssen, und nicht rufen Sie die Basis SetSelectedRowCore für Zeilen, die Sie ausgewählt nicht wollen.

Wenn SelectionMode nicht FullRowSelect ist, sollten Sie SetSelectedCellCore zusätzlich überschreiben (und nicht die Basis SetSelectedCellCore für Zeilen, die nicht ausgewählt werden sollen), da SetSelectedRowCore nur dann eingreift, wenn Sie auf die Zeilenüberschrift klicken einzelne Zelle.

Hier ist ein Beispiel:

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 
    } 
} 

Wenn Sie WinForms verwenden, crack Ihre designer.cs für das entsprechende Formular öffnen und die Deklaration der Datagridview-Instanz ändern, anstatt Datagridview, diese neue Klasse zu verwenden, und ersetzen Sie auch das this.blahblahblah = new System.Windows.Forms.DataGridView(), um auf die neue Klasse zu verweisen.

+0

eine Lösung, die funktioniert ... Aber dafür Ich denke, wir brauchen eine erstellen Klasse, die Datagridview-Steuerelement erweitert ... Bin ich richtig ... Haben wir nicht eine Lösung, die auf aktuellen Datagridview-Klasse funktioniert –

+0

Ich möchte fragen, ob es eine Möglichkeit gibt, nur bestimmte Spalte markieren, auch wenn die Zeile festgelegt ist wie ausgewählt. – Nap

+0

@szevvy, können Sie weiter erklären? Ich brauche diese Antwort jetzt auch. – Sev09

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