none
Linq Auswahl aufheben RRS feed

  • Frage

  • Hallo allerseits,

    habe ein DataGridView in welcher 1-n Zeilen je nach Suchergebnis ausgewählt werden.
    Gibt es eine Möglichkeit den Auswahl von alle ausgewählten Einträge wieder aufzuheben?

    Sowas in der Art?:

    myGrid.Rows.Cast<DataGridViewRow>().All(x => x.Selected = false);

    Danke im Voraus und

    Ge.Ri

    Dienstag, 25. Februar 2020 10:17

Antworten

  • Hi,
    das DataGridView ist ein Steuerelement, welches in der Oberfläche Daten aus einem Datenpuffer anzeigt. Der Datenpuffer kann implizit vom DataGridView erzeugt und verwaltet werden oder es kann auch die Daten eines externen Datenpuffers nutzen, der entweder als DataSource gebunden ist oder auch über den virtuellen Modes bei Bedarf bereitstellen.

    Nach meinen Messungen und meiner Erfahrung ist der interne Puffer die langsamste Variante. Das steht im Widerspruch zu Deiner Bemerkung. Man müsste genau die Bedingungen analysieren, um zu erkennen, warum du solche Messergebnisse erhältst.

    Die absolut schnellste Variante bei größeren Datenmengen ist der virtuelle Modus. Es gibt viele Möglichkeiten, die Geschwindigkeit zu beeinflussen.

    Zusätzlich solltest du auch sagen, was du unter "ausgewählte Einträge" verstehst. Meinst du "Selected Row" oder gefiltert?

    Wenn Du "Selected Rows" meinst, dann lösche einfach die Auswahl, z.. so:

    DataDridView1.SeelectedRows.Clear();

    Wenn du das Rücksetzen eines Filters meins, dann lösche ihn einfach.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert geRe.LI Mittwoch, 26. Februar 2020 11:05
    Mittwoch, 26. Februar 2020 07:26

Alle Antworten

  • Hi,
    um die Auswahl aufzuheben, braucht du doch nur die Originalliste wieder zu binden.

    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    Dienstag, 25. Februar 2020 16:15
  • Hallo Peter,

    und Danke für deine Antwort.
    Die Daten neu anbinden dauert länger da in 3 Spalten DropDownBox'en verwendet werden.
    Da ist die normale Fore-Each Schleife schneller, hatte vorher schon die Zeiten gemessen. 

    foreach (DataGridViewRow dr in myGrid.Rows) { dr.Cells[0].Selected = false; }

    Danke trotzdem für deine Antwort.

    Ist es überhaupt möglich mittels LINQ die Werte eines DataGridViews zu ändern?

    Lg
    Ge.Ri


    • Bearbeitet geRe.LI Mittwoch, 26. Februar 2020 05:51
    Mittwoch, 26. Februar 2020 05:50
  • Hi,
    das DataGridView ist ein Steuerelement, welches in der Oberfläche Daten aus einem Datenpuffer anzeigt. Der Datenpuffer kann implizit vom DataGridView erzeugt und verwaltet werden oder es kann auch die Daten eines externen Datenpuffers nutzen, der entweder als DataSource gebunden ist oder auch über den virtuellen Modes bei Bedarf bereitstellen.

    Nach meinen Messungen und meiner Erfahrung ist der interne Puffer die langsamste Variante. Das steht im Widerspruch zu Deiner Bemerkung. Man müsste genau die Bedingungen analysieren, um zu erkennen, warum du solche Messergebnisse erhältst.

    Die absolut schnellste Variante bei größeren Datenmengen ist der virtuelle Modus. Es gibt viele Möglichkeiten, die Geschwindigkeit zu beeinflussen.

    Zusätzlich solltest du auch sagen, was du unter "ausgewählte Einträge" verstehst. Meinst du "Selected Row" oder gefiltert?

    Wenn Du "Selected Rows" meinst, dann lösche einfach die Auswahl, z.. so:

    DataDridView1.SeelectedRows.Clear();

    Wenn du das Rücksetzen eines Filters meins, dann lösche ihn einfach.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks

    • Als Antwort markiert geRe.LI Mittwoch, 26. Februar 2020 11:05
    Mittwoch, 26. Februar 2020 07:26
  • Hei,

    du hast recht wenn die Daten nur angebunden werden und die Zellen nicht durch andere Controls ersetzt werden, aber in diesem Fall dauert es aufgrund der DropDownList länger.

    Mit "ausgewählten Einträgen" meine ich den Code-Snipp oben, einfache nur die Selected-Property auf false setzen, kein Filter.

    Und Danke für den Ansatz. Manchmal sieht man den Wald vor lauter Bäume nicht.
    Die Lösung ist

    myGrid.ClearSelection();

    Lg

    Ge.Ri



    Mittwoch, 26. Februar 2020 11:05