Laden...

DataGridView sortieren mit IEnumerable<T>

Erstellt von tristar vor einem Jahr Letzter Beitrag vor einem Jahr 279 Views
T
tristar Themenstarter:in
98 Beiträge seit 2016
vor einem Jahr
DataGridView sortieren mit IEnumerable<T>

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?

4.939 Beiträge seit 2008
vor einem Jahr

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?

T
tristar Themenstarter:in
98 Beiträge seit 2016
vor einem Jahr

@Th69 An welcher Stelle meinst du ToList()?
Versucht habe ich dgArtikel.DataSource = artikelRepository.AlleArtikel().ToList(); Dies lässt sich allerdings nicht sotieren.

4.939 Beiträge seit 2008
vor einem Jahr

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);

T
tristar Themenstarter:in
98 Beiträge seit 2016
vor einem Jahr

@Th69 So funktioniert beides! 🙂 Super, vielen Dank!