Hallo Leute, hab hier schon viel hilfreiches gefunden, aber jetzt stecke ich fest. Hoffe, Ihr könnt helfen:
Ich schreibe ein kleines Zeiterfassungsprogramm in VB.NET, das Daten in einer Access-Datenbank speichert. Diese enthält zwei Tabellen "Akten" und "Zeiten". In Zeiten werden die erfassten Arbeitszeiten gespeichert. Jeder Datensatz ist über das Feld "ID" mit dem Primärschlüssel "ID" der Tabelle Akten verknüpft. Dadurch werden die Zeiten bestimmten Akten zugeordnet. Das funktioniert alles.
Ich lasse mir die Zeiten über ein DataGridView mit BindingSource als Datenquelle anzeigen. Über eine Textbox will ich die Zeiten nach zugehöriger Akte filtern. Das klappt einwandfrei über
So kann der User aber nur nach der ID (Primärschlüssel) suchen. Jede Akte hat auch einen Namen, den ich nun zum Filtern nutzen möchte. Mit ZeitenBindingSource.Filter kann ich das nicht tun, weil der Name nicht in der Tabelle Zeiten gespeichert ist. Hier steht nur die ID der Akte drin.
Ich habe verschiedenes probiert:
1) Ich habe eine Abfrage in Access definiert, die Zeiten und Akten kombiniert, und habe diese als Datasource im DGV verwendet. Filtern nach Aktenname klappt dann einwandfrei. Aber ich weiß nicht wie ich im DGV vorgenommene Änderungen speichern kann. Der TableAdapterManager akzeptiert die Abfrage nicht und sagt, er habe keine Tabelle zum Speichern. Wahrscheinlich geht das Speichern bei einer Abfrage gar nicht (oder doch?). Dann scheidet diese Variante aus.
2) Dann hab ich nach der äußerst hilfreichen Anleitung von ErfinderDesRades eine Joining-View erstellt, indem ich im DGV über eine DataGridViewCombobox den jeweiligen Inhalt von Akten.Name zu Zeiten.ID anzeigen lasse. Klappt als solches hervorragend, aber ich kann nicht filtern, weil die Spalte ja nur im DGV angezeigt wird, in der ZeitenBindingSource aber nicht vorhanden ist.
Es sollte ja eigentlich keine so unübliche Sache sein, dass man in einer verknüpften Tabelle "mitsuchen" will. Ich bräuchte einen Filter, der ungefähr so lautet:
Filter = Zeiten.ID = Suche OR (Zeiten.ID = Akten.ID AND Akten.Name LIKE *Suche*)
Wie kann ich das so hinbekommen, dass ich das Ergebnis im DGV bearbeiten und speichern kann?
Ich schreibe ein kleines Zeiterfassungsprogramm in VB.NET, das Daten in einer Access-Datenbank speichert. Diese enthält zwei Tabellen "Akten" und "Zeiten". In Zeiten werden die erfassten Arbeitszeiten gespeichert. Jeder Datensatz ist über das Feld "ID" mit dem Primärschlüssel "ID" der Tabelle Akten verknüpft. Dadurch werden die Zeiten bestimmten Akten zugeordnet. Das funktioniert alles.
Ich lasse mir die Zeiten über ein DataGridView mit BindingSource als Datenquelle anzeigen. Über eine Textbox will ich die Zeiten nach zugehöriger Akte filtern. Das klappt einwandfrei über
So kann der User aber nur nach der ID (Primärschlüssel) suchen. Jede Akte hat auch einen Namen, den ich nun zum Filtern nutzen möchte. Mit ZeitenBindingSource.Filter kann ich das nicht tun, weil der Name nicht in der Tabelle Zeiten gespeichert ist. Hier steht nur die ID der Akte drin.
Ich habe verschiedenes probiert:
1) Ich habe eine Abfrage in Access definiert, die Zeiten und Akten kombiniert, und habe diese als Datasource im DGV verwendet. Filtern nach Aktenname klappt dann einwandfrei. Aber ich weiß nicht wie ich im DGV vorgenommene Änderungen speichern kann. Der TableAdapterManager akzeptiert die Abfrage nicht und sagt, er habe keine Tabelle zum Speichern. Wahrscheinlich geht das Speichern bei einer Abfrage gar nicht (oder doch?). Dann scheidet diese Variante aus.
2) Dann hab ich nach der äußerst hilfreichen Anleitung von ErfinderDesRades eine Joining-View erstellt, indem ich im DGV über eine DataGridViewCombobox den jeweiligen Inhalt von Akten.Name zu Zeiten.ID anzeigen lasse. Klappt als solches hervorragend, aber ich kann nicht filtern, weil die Spalte ja nur im DGV angezeigt wird, in der ZeitenBindingSource aber nicht vorhanden ist.
Es sollte ja eigentlich keine so unübliche Sache sein, dass man in einer verknüpften Tabelle "mitsuchen" will. Ich bräuchte einen Filter, der ungefähr so lautet:
Filter = Zeiten.ID = Suche OR (Zeiten.ID = Akten.ID AND Akten.Name LIKE *Suche*)
Wie kann ich das so hinbekommen, dass ich das Ergebnis im DGV bearbeiten und speichern kann?