Hallo zusammen,
Ich bin gerade dabei mich mit DataSets und LINQ, etc zu beschäftigen und habe ein schönes Projekt für mich gefunden. Inzwischen krieg ich die Darstellung und Filterung der Daten ziemlich gut hin, jedoch hängts beim Zurückschreiben der Änderungen von der DataGridView in mein DataSet.
Soweit zu meinem Problem, nun zu meinem Projekt. Ich habe ein sehr einfaches DataSet (ScreenShot im Anhang). Zwei Tabellen mit einer 1:n-Verknüpfung. Track.CD zeigt auf CD.Id.
Die Daten lese ich mittel LINQ aus dem DataSet mit einem Join aus. Und ich glaube dieses Join erschwert mir die Sache, denn ich konnte die Query nicht direkt als Source angeben, sondern habe das jetzt mit einem "Object Shredder" (msdn.microsoft.com/en-us/library/bb669096(v=vs.110).aspx) mappen müssen. Bei einer Abfrage ohne Join würden die Änderungen meinem Verständnis nach direkt zurückgeschrieben, jedoch ist das hier nicht "direkt gemappt".
Ich habe bereits versucht Lösungen zu finden, habe aber leider nichts nützliches gefunden (vlt falsche Begriffe?). Das hier war mein einziges Ergebnis und die Antwort war leider nur, dass es "tricky" sein wird das zu realisieren.
Und nun der Code wie die Daten in die GridView kommen.
Vielleicht noch kurz zum Erklären:
Und falls ich was vergessen habe zu schreiben einfach Fragen, danke
Eine kleine Bitte noch, das sind meine ersten Versuche, also wenn da grobe Fehler drin sind bitte ich um einen kleinen Hinweis.
Aus den Tipps und Tricks verschoben
-Artentus
Ich bin gerade dabei mich mit DataSets und LINQ, etc zu beschäftigen und habe ein schönes Projekt für mich gefunden. Inzwischen krieg ich die Darstellung und Filterung der Daten ziemlich gut hin, jedoch hängts beim Zurückschreiben der Änderungen von der DataGridView in mein DataSet.
Soweit zu meinem Problem, nun zu meinem Projekt. Ich habe ein sehr einfaches DataSet (ScreenShot im Anhang). Zwei Tabellen mit einer 1:n-Verknüpfung. Track.CD zeigt auf CD.Id.
Die Daten lese ich mittel LINQ aus dem DataSet mit einem Join aus. Und ich glaube dieses Join erschwert mir die Sache, denn ich konnte die Query nicht direkt als Source angeben, sondern habe das jetzt mit einem "Object Shredder" (msdn.microsoft.com/en-us/library/bb669096(v=vs.110).aspx) mappen müssen. Bei einer Abfrage ohne Join würden die Änderungen meinem Verständnis nach direkt zurückgeschrieben, jedoch ist das hier nicht "direkt gemappt".
Ich habe bereits versucht Lösungen zu finden, habe aber leider nichts nützliches gefunden (vlt falsche Begriffe?). Das hier war mein einziges Ergebnis und die Antwort war leider nur, dass es "tricky" sein wird das zu realisieren.
Und nun der Code wie die Daten in die GridView kommen.
VB.NET-Quellcode
- Dim cds As DataTable = dsData.Tables("cd")
- Dim tracks As DataTable = dsData.Tables("track")
- Dim dtSource As DataTable
- Dim query = From cd In cds.AsEnumerable _
- Join track In tracks.AsEnumerable _
- On cd.Field(Of Integer)("id") Equals track.Field(Of Integer)("cd") _
- Where (track.Field(Of String)("titel").ToLower() & " " & track.Field(Of String)("interpret").ToLower() & " " _
- & track.Field(Of String)("album").ToLower()).containsArray(strKeywords) _
- And (cd.Field(Of String)("name").ToLower = strCDFilter.ToLower Or strCDFilter = "") _
- Order By cd.Field(Of Integer)("nummer"), track.Field(Of Integer)("tracknr") _
- Select New With _
- { _
- .CD = cd.Field(Of String)("name"), _
- .Titel = track.Field(Of String)("titel"), _
- .Artist = track.Field(Of String)("interpret"), _
- .Album = track.Field(Of String)("album"), _
- .Nr = track.Field(Of Integer)("trackNr") _
- }
- dtSource = query.CopyToDataTable()
- dgvData.DataSource = dtSource
Vielleicht noch kurz zum Erklären:
- dgvData = Mein DataGridView
- track.Field(Of String)("album").ToLower()).containsArray(strKeywords) = Eigene Extension zum prüfen ob alle Werte aus strKeywords (String-Array) in dem String vorhanden sind. Gibt True oder False zurück.
- query.CopyToDataTable = Anwendung oben genannter "Object Shredder"
Und falls ich was vergessen habe zu schreiben einfach Fragen, danke
Eine kleine Bitte noch, das sind meine ersten Versuche, also wenn da grobe Fehler drin sind bitte ich um einen kleinen Hinweis.
Aus den Tipps und Tricks verschoben
-Artentus
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Artentus“ ()