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?
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?
@Th69 An welcher Stelle meinst du ToList()
?
Versucht habe ich dgArtikel.DataSource = artikelRepository.AlleArtikel().ToList();
Dies lässt sich allerdings nicht sotieren.
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);
@Th69 So funktioniert beides! 🙂 Super, vielen Dank!