web-dev-qa-db-de.com

DataGridView erste Spalte, erste Zeile, ist beim Laden ausgewählt, ich möchte das nicht

Im Grunde ist die allererste Spalte in der ersten Zeile immer ausgewählt. Ich kann keinen Weg finden, um sie zu erhalten, so dass die Rasteransicht keine ausgewählten Zellen enthält. Irgendeine Hilfe?

20
Spooks

Ich hatte das gleiche Problem und nichts funktionierte. Die Lösung, die für mich funktionierte, bestand darin, die 'Tabstop'-Eigenschaft auf False zu setzen und die ClearSelection () -Methode unmittelbar nach der Datenbindung aufzurufen.

18
DaneAnthony

Ich hatte selbst einige Probleme damit. Ich habe ein Benutzersteuerelement mit einer DataGridView, die beim Laden von Anwendungen/Formularen aufgefüllt wird. Die Auswahl der ersten Zeile scheint zu erfolgen after Die Datenbindung ist abgeschlossen und das Raster ist gefüllt/gerendert. Das Ladeereignis für Benutzersteuerelemente (und vermutlich auch das Laden von Formularen) wird zuvor ausgelöst. Daher hat das Aufrufen von gridView.ClearSelection () oder das Annullieren von gridView.CurrentCell in diesen Ladeereignissen keine Auswirkung.

Was schließlich für mich funktionierte, war das Aufrufen von .ClearSelection () aus dem DataBindingComplete -Ereignis des DataGridView selbst. Das hat wie ein Zauber funktioniert.

23
Dave Marley

Setzen Sie die CurrentCell-Eigenschaft der DGV nach der Datenbindung der DGV auf null: 

dataGridView1.CurrentCell = null; 

Beachten Sie, dass dies nicht verhindert, dass mit der Zeilen- und Zellenauswahl verknüpfte DGV-Ereignisse ausgelöst werden. Sie müssen ausgewählte Zeilen- oder Zellzahlprüfungen für RowEnter-Ereignisse hinzufügen, etwa wie folgt:

private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) {
    if (dataGridView1.SelectedRows.Count == 1) {
        // Do stuff since a row is actually selected ...
    }
}
3
Jay Riggs

nach dem Binden von Daten einfach anrufen

dataGridView.ClearSelection();

Ich denke, Sie haben versucht, es aufzurufen, bevor Sie dataGrindView auf Daten setzen, wenn Sie es jemals versucht haben

1
Minimihi

Sie sollten Folgendes aufrufen: ClearSelection nach Ereignis: DataBindingComplete

1
user2272788

Ich wollte auch schreibgeschütztes DataGridView, und in meinem Fall holt ein separater Thread langsam Daten und gibt sie über eine Multithread-Liste und einen Formtimer an den GUI-Thread weiter. Bei diesem Ansatz erweitert der GUI-Thread das Datenraster nach Bedarf und ermöglicht das Durchsuchen.

Mit den oben genannten Vorschlägen könnte die Auswahl ausgeblendet werden, jedoch konnte keines der Zellen zurückgesetzt werden, wenn mein GUI-Thread dataGridView.Rows.Add () mit einer Auswahl aufruft. Dazu gehören Hooking-Ereignisse, um die Auswahl zu verhindern, und den Bearbeitungsmodus zu deaktivieren.

Ich habe das Verhalten gefunden, mit dem ich wollte

dataGridView.AllowUserToAddRows = false;

Jetzt habe ich ein dynamisch dimensioniertes, asynchron geladenes Datengitter, das schreibgeschützt ist.

Die BackgroundWorker-Lösung hat mir nicht gefallen, da mein Ladecode durch den Fortschritt ziemlich belastet wird. Ich mochte auch nicht die Anforderung, eine neue DataTable bei jeder Aktualisierung des Gitters neu zu erstellen. Ich konnte keine Hinweise zum Aktualisieren der DataGridView mit einer DataTable finden, die gerade aufgebaut wird, aber es scheint, dass dies möglich sein sollte.

0
jws

WENN ich das Q verstehe. Dies verhindert, dass eine Zelle nach der Datenbindung ausgewählt wird. Die Hintergrundfarbe bleibt also weiß. Sie können auch die Spalten bearbeiten und dort festlegen.

DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor;
0
CW1255

Stellen Sie sicher, dass Sie nicht die Methode aufrufen, um die Daten aus dem Formularkonstruktor zu laden. Wenn Sie es aus dem form.load () aufrufen

tun Sie dies auch nach dem Laden des datagridview

DataGridView.Rows[0].Selected = false;
0
Dennis Collins

Meistens wird dies durch einen kleinen Fehler verursacht. Möglicherweise ist datagridview für ein Gruppenfeld festgelegt. Wenn mehr Gruppenfelder vorhanden sind, wird die Auswahl im ersten Gruppenfeld beendet. Halten Sie das Gruppenfeld daher nach Prioritäten.

0
gireesh mohan

Ich hatte das gleiche Problem in meinem Fall, anstatt die Sichtbarkeit der ersten Zeile auf false zu setzen. Es ist besser, den GridColor-Wert festzulegen, um ein Risiko bei SelectionChanged Event zu vermeiden.

  1. Setzen Sie dgv.ClearSelection () auf DataBindingComplete Event und setzen Sie GridColor auf Ihre DataGridView BackColor.

  2. Setzen Sie GridColor auf die sichtbare Farbe (z. B. Grau) für Ihre Bestückungsmethode bzw. das Brennereignis.

0
Robert Timothy