Hier ein kleines Beispiel, wie man mit Linq eine typisierte DataTable abfragen kann, und die Abfrage in ein DataView verwandeln, welches man als DataSource eines DatagridViews verwenden kann.
Das ist eine Filter-Technik, die mehr Möglichkeiten bietet als olle DataExpressions, und die Abfrage ist typisiert, während bei DataExpressions ja der Ausdruck in einem String notiert wird, wo der Compiler nicht reingucken kann, ob das funktioniert.
Also hier ein Filter, der nach Artikelname und KategorieName filtert, mit der besonderheit, dass Kategoriename gar keine Spalte der ArtikelDataTable ist, sondern KategorieName ist eine Spalte der übergeordneten KategorieDataTable.
(Datenmodell: Kategorien->Artikel)
[Edit 2017-10]: Bitter-Wermuts-Tropfen
Die hier gezeigte Linq2Dataset-Filter-Methode ist nicht kompatibel zur Filterung durch Setzen der
Hier ( <- folge dem Link ) hat @OliverSte sich damit herumgeärgert, und konnte schließlich den Fail genauer berschreiben:
Wenn dem so ist, ist logisch, dass das vorherige Linq2Dts-Dataview verloren geht.
Das ist eine Filter-Technik, die mehr Möglichkeiten bietet als olle DataExpressions, und die Abfrage ist typisiert, während bei DataExpressions ja der Ausdruck in einem String notiert wird, wo der Compiler nicht reingucken kann, ob das funktioniert.
Also hier ein Filter, der nach Artikelname und KategorieName filtert, mit der besonderheit, dass Kategoriename gar keine Spalte der ArtikelDataTable ist, sondern KategorieName ist eine Spalte der übergeordneten KategorieDataTable.
(Datenmodell: Kategorien->Artikel)
VB.NET-Quellcode
- Private Sub FilterButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btApply.Click, btRemove.Click
- Select Case True
- Case sender Is btApply
- Dim filtered = From rw In NorthWindDts.Artikel _
- Where rw.Artikelname Like ArtikelnameTextBox.Text & "*" AndAlso rw.KategorienRow.Kategoriename Like KategorienameTextBox.Text & "*"
- ArtikelDataGridView.DataSource = filtered.AsDataView
- Case sender Is btRemove
- ArtikelDataGridView.DataSource = ArtikelBindingSource
- End Select
- End Sub
[Edit 2017-10]: Bitter-Wermuts-Tropfen
Die hier gezeigte Linq2Dataset-Filter-Methode ist nicht kompatibel zur Filterung durch Setzen der
BindingSource.Filter
-Property.Hier ( <- folge dem Link ) hat @OliverSte sich damit herumgeärgert, und konnte schließlich den Fail genauer berschreiben:
Ich vermute, das hat technische Gründe, zB könnte ich mir vorstellen, dass beim Setzen eines Bs-Filters ein neues DataView erzeugt wird, und als DataSource hergenommen.OliverSte schrieb:
Der BS-Filter sucht nicht in der DataView, sondern in der alten DataSource. Wenn da was ist, wird es gezeigt und die LINQ-DataView verworfen.
Wenn dem so ist, ist logisch, dass das vorherige Linq2Dts-Dataview verloren geht.
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „ErfinderDesRades“ ()