Hallo zusammen.
Ich habe in meinem tDS eine Tabelle mit Kochrezepten. Eine weitere mit Zutaten. Diese Zutaten werden mit einer Hilfs-/Koppeltabelle mit den Rezepten verbunden (m:n-Relation), denn jede Zutat kann in mehreren Rezepten stehen und jedes Rezept wird natürlich mehrere Zutaten enthalten. Soweit so langweilig:
Nun lasse ich mir in einem DGV die Rezeptnamen anzeigen. Allerdings will ich auch nach Zutaten suchen können, sodass ich sagen kann: »DGV, liste mir alle Rezeptnamen auf, die die Zutaten x, y, z enthalten.« Das MSDN macht klar, dass ich da den BindingSource-Filter vergessen kann, da Child-Rows nur per Aggregate-Funktion als Filterparameter herhalten können:
Nächste Variante wäre, dass ich der Rezepttabelle eine Boolean-Spalte
Eine Hilftabelle, die nur die RezeptID und dann die
Das Filtern wäre nur komplexer:
Wenn man jetzt mal von dem etwas einsilbigen TextBox-Filter absieht, da der natürlich nur erstmal für eine Filterzutat herhalten kann (denn man kann man ja problemlos alle Filterzutaten in ne ListBox hauen und dann auf Knopfdruck die Rezepte nach allen Zutaten fiiltern): Wie macht man es ggf. von Grundauf komplett anders besser?
*Topic verschoben*
Ich habe in meinem tDS eine Tabelle mit Kochrezepten. Eine weitere mit Zutaten. Diese Zutaten werden mit einer Hilfs-/Koppeltabelle mit den Rezepten verbunden (m:n-Relation), denn jede Zutat kann in mehreren Rezepten stehen und jedes Rezept wird natürlich mehrere Zutaten enthalten. Soweit so langweilig:
Nun lasse ich mir in einem DGV die Rezeptnamen anzeigen. Allerdings will ich auch nach Zutaten suchen können, sodass ich sagen kann: »DGV, liste mir alle Rezeptnamen auf, die die Zutaten x, y, z enthalten.« Das MSDN macht klar, dass ich da den BindingSource-Filter vergessen kann, da Child-Rows nur per Aggregate-Funktion als Filterparameter herhalten können:
MSDN schrieb:
because child relationships may return multiple rows, you must include the reference to the child column in an aggregate function. For example, Sum(Child.Price) would return the sum of the column named Price in the child table.
Nächste Variante wäre, dass ich der Rezepttabelle eine Boolean-Spalte
ShowInDgv
verpasse, den BindingSource-Filter darauf einstelle und per Code dann entscheide, bei welchem Rezept die Eigenschaft ShowInDgv
auf True
bzw. False
gesetzt wird. Käme mir aber ziemlich falsch vor, weil dort m.E. z.B. Datentrennung nicht eingehalten wird. Denn was interessiert die Datentabelle, ob sie irgendwo angezeigt wird oder nicht? Außerdem wird dann ein zusätzlicher Wert beim Beenden mitgespeichert, den ich manuell resetten müsste. Effektiv gesehen, gehört dieser Wert einfach nicht in die Persistierung rein. Würde mich nicht wundern, wenn da noch mehr Murks entstehen würde.Eine Hilftabelle, die nur die RezeptID und dann die
ShowInDgv
-Property enthielt, könnte ich mir auch vorstellen. Leider kennt das tDS keine 1:1-Relation, sodass ich sagen könnte, dass ich quasi die Rezepttabelle durch eine Zusatzeigenschaft erweitere, ohne die Grundtabelle zu beeinflussen. Hätte den Vorteil, dass ich jene Tabelle nicht mit an die Speicherung übergeben müsste. Also per 1:n-Tabelle:Das Filtern wäre nur komplexer:
VB.NET-Quellcode
- Dim IsVisible = False
- For Each VisibleRecipe In Tds.VisibleRecipes
- IsVisible = False
- Dim ListOfIngredientsInRecipe = VisibleRecipe.RecipesRow.GetIngredientsInRecipesRows
- For Each IngredientInRecipe In ListOfIngredientsInRecipe
- If IngredientInRecipe.IngredientsRow.Name = TxtIngretientsFilter.Text Then IsVisible = True : Exit For
- Next
- VisibleRecipe.IsVisible = IsVisible
- Next
Wenn man jetzt mal von dem etwas einsilbigen TextBox-Filter absieht, da der natürlich nur erstmal für eine Filterzutat herhalten kann (denn man kann man ja problemlos alle Filterzutaten in ne ListBox hauen und dann auf Knopfdruck die Rezepte nach allen Zutaten fiiltern): Wie macht man es ggf. von Grundauf komplett anders besser?
*Topic verschoben*
Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()