Laden...

Konzeptfrage: Produkt einer Kategorie zuordnen?

Letzter Beitrag vor 18 Jahren 16 Posts 1.861 Views
Konzeptfrage: Produkt einer Kategorie zuordnen?

Hi Leute,

ich hab eine Datenbank, die in ihrer Struktur ähnlich der Beispiel-DB Northwind vom MSSQL Server ist. Also mit Produkten, die Kategorien über die ID der Kategorie zugeordnet sind. Jedes Produkt hat also ein Feld CategoryID. Die Kategorien sind in einer Baum-Struktur geordnet, haben also auch ein Feld ParentCategoryID.

Die Frage ist jetzt (bitte genau lesen), wie ich diese Kategorisierung in einem Formular optisch am besten gestalte. Ich dachte schon an ein TreeView. Hierbei habe ich allerdings das Problem, daß ich dieses nicht direkt an die Datenbank binden kann, also die Zuweisung einer neuen Kategorie manuell vornehmen muss, was mein gesamtes rein Datenbindungs-gesteuertes Grundkonzept wieder unterminiert. Wie könnte ich diese Baumstruktur am besten direkt datenbankgebunden darstellen und mit einem Klick auf eine der dargestellten Kategorien dem aktuell ausgewählten Produkt die ID der neu gewählten Kategorie zuweisen, ohne nur für die Zuweisung extra Code schreiben zu müssen? Es sollte also direkt über die Datenbindung geschehen.

Gibt es da Möglichkeiten? Jemand 'ne Idee?

Danke
Gruß, Hendrik

edit: sorry, hab nicht richtig gelesen =)

.unreal

p.s TreeView unterstützt kein DataBinding, müsstest auf ein 3rd Party Komponente zurückgreifen.

... oder selber eine entwickeln... okay. Das kann was werden...

Kennst du eine 3rd Party Komponente, die das kann? Selbstverständlich wenn möglich OpenSource...

guck mal bei www.codeproject.com, ich glaube ich hab dort mal eine gesehen, müsste aber selber suchen. Das überlass ich nun aber dir =)

.unreal

Muss es ein TreeView sein? Kannst doch auch einfach eine Combobox für die Kategorienauswahl, und ein DataGridview für die Darstellung der Childs verwenden?

.unreal

Naja, da die Kategorien in der Tabelle schon eine Art Baum darstellen (ParentID), dachte ich schon an eine Art TreeView, um alle Kategorien sinnvoll optisch anzuzeigen.

Ohne DataBinding ist das ziemlich einfach Lösbar, wo ist das Problem?

Das Problem ist, daß ich gern auf "ohne DataBinding" verzichten würde, da das gesamte restliche Programm mit DataBinding auskommt. DataBinding erleichtert und verkürzt einiges, wo man sonst immense Mengen Code für bräuchts. Ich weiß das, ich hab das Programm gerade dementsprechend umgestrickt, da mir DataBinding vorher nicht in dem Maße bekannt war.

Das Treeview mit einer Rekursion zu füllen ist in ein par wenigen Zeilen geschrieben, ich weiss aber genau, was du an DataBinding magst 🙂 Trotzdem würde ich auf eine 3rd-Party-TreeViewWithDataBinding-Klasse verzichten.

.unreal

Das Füllen selbst ist auch weniger das Problem. Das ist wirklich recht schnell abgehandelt. Problematisch wird es bei der Markierung der Kategorie des aktuell ausgewählten Produkts (wie macht man das dann am geschicktesten?) und bei der Zuweisung einer neu ausgewählten Kategorie.

Wie macht man diese beiden Punkte ohne Datenbindung, sodaß es sich auf das aktuelle Produkt exakt so auswirkt, wie eine Änderung an einer über Datenbindung angeschlossenen Eigenschaft?

Hast du es schon mit einem DataBinding auf die SelectedNode versucht?

Nee... geht das?

Warum sollte es nicht "gehen"? Man kann jedes Property binden!

Okay... Bildungskrater. Muss ich mir mal anschauen, hab gerade aber keinen Zugriff drauf. Danke für den Hinweis. 🙂 Ich meld mich wieder, wenn's klappt oder auch nicht.

Da ich das mit der Bindung von SelectedNode nicht hinbekommen habe, habe ich mir jetzt ein DBTreeView abgeleitet. Also eine TreeView Komponente, die Datenbindung unterstützt. Allerdings auf das Daten-Schema der Tabelle optimiert. Heißt, sie passt aktuell auch wirklich nur für die Tabelle. Vielleicht erweitere ich sie mal, daß man die Identifikations- und Parent-Spalte auswählen kann. Grundsätzlich ist sie jetzt auf das 'Baumkonzept ParentID = ID' ausgerichtet und mit einer rekursiven Funktion versehen, die den Baum aufbaut.

Funktioniert soweit schon sehr gut.