2010-10-08 17 views

Antwort

15

Ich hatte das gleiche Problem und nichts funktionierte begrenzt. Die Lösung, die für mich funktionierte, war das Setzen der Eigenschaft 'Tabstop' auf False und das Aufrufen der ClearSelection() -Methode unmittelbar nach der Datenbindung.

+3

Netter Tipp: Dies löst immer noch das SelectionChanged-Ereignis aus, das verursachen könnte Probleme für einige –

+0

@Above Sie können das Ereignis der Auswahländerungen lösen, indem Sie so etwas tun. "MyDataGrid.SelectionChanged - = this.MyDataGrid_SelectionChanged;" // Führen Sie einige Operationen durch und binden Sie das Selektionsänderungsereignis erneut, indem Sie das tun, "MyDataGrid.SelectionChanged + = this.MyDataGrid_SelectionChanged;" Ich bin nicht sicher, ob dies zu Leistungsproblemen führt. – Hari

3

der CurrentCell Eigenschaft des DGV Set nach Datenbindung der DGV auf null:

dataGridView1.CurrentCell = null; 

Beachten Sie, dass dies zu tun wird nicht DGV Ereignisse mit Zeilen- und Zellenauswahl von Brennen zugeordnet verhindern; Sie werden ausgewählte Zeile oder Zellzahl Kontrollen RowEnter Ereignisse, so etwas wie dies hinzufügen:

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

ich ziemlich viel Mühe mit diesem selbst hatte. Ich habe ein Benutzersteuerelement mit einem DataGridView, das beim Laden der Anwendung/des Formulars gefüllt wird. Die Auswahl der ersten Zeile scheint zu passieren nach Datenbindung ist abgeschlossen und das Gitter ist bevölkert/gerendert. Das Benutzersteuerungsladeereignis (und vermutlich auch das Formularladen) wird davor ausgelöst. Daher hat das Aufrufen von gridView.ClearSelection() oder das Annullieren von gridView.CurrentCell in diesen Ladeereignissen keinen Nettoeffekt.

Was schließlich für mich gearbeitet rufen .ClearSelection() aus dem Databindingcomplete Ereignisse des Datagridview selbst. Das hat wie ein Zauber funktioniert.

+1

Das funktionierte für mich, aber das SelectionChanged-Ereignis des Gitters wird immer noch danach mit der ausgewählten Zeile aufgerufen, also muss ich eine hässliche Flag-Logik in meinem Formular haben, um herauszufinden, welcher Benutzer ausgewählt wurde eine Reihe oder nicht. – qwerty13579

+0

Deshalb sollte ich nicht nur die beste Antwort lesen.:/ –

+0

Ich habe versucht, die Antwort ticked und das hat nicht funktioniert für mich, diese Antwort funktioniert! Danke Dave. – harag

1

nach Daten rufen Sie einfach

dataGridView.ClearSelection(); 

Ich denke, man versucht, es zu nennen, bevor die Daten zu dataGrindView Einstellung, auch wenn Sie jemals versucht es

+0

Das funktioniert nicht, die erste Zeile ist immer noch ausgewählt – qwerty13579

0

Wenn ich das Q verstehe. Dies verhindert, dass eine Zelle nach der Datenbindung ausgewählt angezeigt wird. So bleibt die Rückenfarbe weiß. Sie können auch die Spalten bearbeiten und dort festlegen.

DataGridView.DefaultCellStyle.SelectionBackColor = DataGridView.DefaultCellStyle.BackColor; 
1

sollten Sie rufen: Clear nach Ereignis: Databindingcomplete

0

Ich wollte auch schreibgeschützte Datagridview, und in meinem Fall ein separater Thread langsam Daten zu erhalten und an den GUI-Thread über eine Multi Gabe -Fadenliste und Form-Timer. Bei diesem Ansatz erweitert der GUI-Thread das Datenraster nach Bedarf und ermöglicht das Durchsuchen.

Mit den obigen Vorschlägen könnte die Auswahl ausgeblendet sein, aber keine konnte verhindern, dass die Zelle zurückgesetzt wird, wenn mein GUI-Thread dataGridView.Rows.Add() mit einer Auswahl aufruft. Dazu gehören das Einhängen von Ereignissen, um die Auswahl zu verhindern, und das Deaktivieren des Bearbeitungsmodus.

fand ich das Verhalten, das ich mit

dataGridView.AllowUserToAddRows = false; 

Jetzt habe ich einen dynamische Größe, asynchron geladen Datenraster gesucht, die nur gelesen wird.

Ich mochte die BackgroundWorker Lösung nicht, weil der Fortschritt eine Belastung für meinen Ladecode ist. Ich mochte auch nicht die Notwendigkeit, eine neue DataTable bei jeder Aktualisierung des Rasters neu zu erstellen.Ich konnte keine Hinweise zum Aktualisieren des DataGridView mit einer DataTable finden, die gerade aufgebaut wird, aber es scheint so, als ob dies möglich sein sollte.

-1

hatte ich das gleiche Problem und haben es durch Überschreiben der OnPropertyChanged Ereignis des

Grid
protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e) 
{ 
    base.OnPropertyChanged(e); 
    this.ClearSelection(); 
} 
0

Stellen Sie sicher, dass nicht die Methode aufrufen zu laden, um die Daten aus dem Formular-Konstruktor gelöst. Wenn Sie es von der Form.Load() aufrufen

auch nach dem Datagridview wird geladen tun, um diese

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

ich das gleiche Problem in meinem Fall hatte, statt der ersten Zeile Sichtbarkeit auf false gesetzt. Es wäre besser, den GridColor-Wert festzulegen, um ein Risiko für SelectionChanged Event zu vermeiden.

  1. Put dgv.ClearSelection() auf Databindingcomplete-Ereignis und setzen Gridcolor auf Ihre Datagridview Backcolor.

  2. Setzen Sie GridColor auf die sichtbare Farbe (z. B. "Grau") für Ihre Populate-Methode/Feuerungsereignis.

0

Die meiste Zeit ist es durch einen kleinen Fehler verursacht, vielleicht die datagridview auf einem Gruppenfeld gesetzt. Wenn es mehrere Gruppenfelder gibt, wird die Auswahl im ersten Gruppenfeld angehalten. Behalten Sie das Gruppenfeld daher nach Priorität bei.

Verwandte Themen