Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
DataGridView sortieren mit IEnumerable<T>
tristar
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

DataGridView sortieren mit IEnumerable<T>

beantworten | zitieren | melden

Hallo,
ich verwende für meine Abfragen Dapper.
z.B.:
 return db.Query<Lager>(q, commandType: CommandType.Text);
So erhalte ich als Rückgabewert IEnumerable<Lager>.

Wenn ich dies direkt an eine DataGridView binde, kann ich anschließend nicht sortieren. Daher habe ich mir eine Methode
ToDataTable
erstellt, womit ich
die DataGridView wieder sortieren kann, was auch prima klappt - eigentlich.

Solange ich IEnumerable<T> direkt an die DataGridView gebunden hatte, konnte ich z.B. per Doppelklick einen Datensatz wie folgt aufrufen:

Artikel a = new Artikel();
private void dgArtikel_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
            if (e.RowIndex != -1)
            {
                a = dgArtikel.Rows[e.RowIndex].DataBoundItem as Artikel;
                .....
             }
}

Seitdem ich die Daten nun per DataTable binde, funktioniert der obige Aufruf nicht mehr.
Was kann ich machen, dass der obige Aufruf trotz Verwendung einer DataTable funktioniert?
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Eine DataTable hat als Datensätze DataRow-Werte, nicht direkt die Datenobjekte (wie bei dir Lager oder Artikel) - schau einfach im Debugger den Wert von dgArtikel.Rows[e.RowIndex].DataBoundItem an.

Hast du schon mal ToList() stattdessen probiert?
private Nachricht | Beiträge des Benutzers
tristar
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

beantworten | zitieren | melden

@Th69 An welcher Stelle meinst du ToList()?
Versucht habe ich dgArtikel.DataSource = artikelRepository.AlleArtikel().ToList(); Dies lässt sich allerdings nicht sotieren.
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4.643

beantworten | zitieren | melden

Ich habe gerade noch mal im Internet nachgelesen: leider unterstützen weder List<T> noch BindingList<T> direkt das Sortieren bei einer DataGridView.
Aber probiere mal SortableBindingList<T>:


var articles = artikelRepository.AlleArtikel().ToList();
dataGridView.dataSource = SortableBindingList<Artikel>(articles);
private Nachricht | Beiträge des Benutzers
tristar
myCSharp.de - Member



Dabei seit:
Beiträge: 95

Themenstarter:

beantworten | zitieren | melden

@Th69 So funktioniert beides! Super, vielen Dank!
private Nachricht | Beiträge des Benutzers