Databind an mehrere ComboBoxen

FwDonnerbalken

Erfahrenes Mitglied
N'Abend zusammen,

zum Feierabend habe ich ein kleines Problemchen.

Ich erzeuge mir eine DataTable welche ich als Member ich meinen Form ablege.
Einer Methode übergebe ich nun eine ComboBox. In dieser binde ich die DataTable als DataSource an die ComboBox. Geht ja auch soweit ganz gut. Letztlich habe ich nun zwei Comboboxen auf dem Form mit derselben DataTable als DataSource.

Etwas unglücklich bin ich nun mit der Tatsache, dass die Auswahl eines Items in einen Combobox dazu führt, das in den anderen Combobox mit derselben Datenquelle ebenfalls dieses Item ausgewählt wird.

Liegen tut dies wahrscheinlich daran, dass alle Comboxen auf dieselbe DataTable referenzieren wo der "Satzzeiger" der DataTable dafür sorgt, dass überall derselbe Datensatz angezeigt wird, aber wie löst man das Problem?

Die Zuweisung von combo.DataSource = datenDataTable.Clone() bringt jedenfalls nicht den gewünschten Erfolg.
 
Hallo Sebastian,

ohne den Code genauer zu kennen würde ich sagen,
das lässt sich meiner Meinung nach nur bewerkstelligen in dem
du bei den anderen Comboboxen ohne Databinding arbeitest.
Die Frage ist halt ob du die Auswahl in den cbo's 2 und 3 auch in der
DataTable bzw. in der Datenbank updaten möchtest.
Das geht auch, aber mit etwas mehr Aufwand.

Nicht in jedem Fall ist DataBinding die 1. Lösung :)

Oder...
Du musst ein zusätzliches (doppeltes) Feld mit den gleichen
Daten an die anderen cbo's binden. Was natürlich nicht optimal
für das DB Design ist.

Gruß
Jens
 
Schalte mal eine BindingSource dazwischen.
Vielleicht hilfts ja.

Genau das ist die Lösung!

@JensG
Databinding muss ja nicht unbedingt etwas mit einer Datenbank zu tun haben. Es ist aber eine sehr komfortable Methode um Listen mit Daten zu befüllen, insbesondere dann, wenn der angezeigte Text nicht dem Wert entspricht, den man vom Steuerelement nach der Auswahl eines Eintrages erhalten will.
 
Hallo Sebastian,

Databinding muss ja nicht unbedingt etwas mit einer Datenbank zu tun haben.

mit was denn sonst ? Abgesehen davon das ein XML File auch eine Datenquelle
sein kann. Oder gibt es da noch andere Datenquellen, die mir unbekannt sind (kann ja durchaus sein) ?

Es ist aber eine sehr komfortable Methode um Listen mit Daten zu befüllen, insbesondere dann, wenn der angezeigte Text nicht dem Wert entspricht, den man vom Steuerelement nach der Auswahl eines Eintrages erhalten will.

Das stimmt schon, und seit ADO.NET ist das auch um einiges besser geworden.
Ich nutze es auch oft, aber auch nicht immer. Besonders dann nicht wenn ich die volle
Kontrolle über den Code haben möchte.

Gut, aber das nur als Bemerkung.
Die Lösung mit dem Zwischenschalten einer Bindingsource funktioniert ja.

Eine Frage noch zur Problemlösung... da ich es nicht getestet habe.

Heißt das du hast eine Bindingsource erstellt, dieser die Datatable als
DataSource übergeben ?
Und nun alle Controls an die Bindingsource gebunden oder alle Controls (außer
Combo2 und Combo3) an die DataTable und Combo2 und Combo3 and die Bindingsource ? oder umgekehrt ?
Ohne es zu testen bin ich nämlich nicht so schlüssig wie das funktioniert.

Gruß
Jens
 
Die DataTable an den Datasource der BindingSource und die BindingSource an den Datasource der Combobox; und das für alle drei Combos.

Wobei es bei der DataTable immer nur eine Instanz gibt, während ich von der BindingSource pro Combo zur Zeit eine Instanz habe. Müsste morgen (in ein paar Stunden) mal ausprobieren ob es mit nur einer Instanz der BindingSource klappt.

Ich berichte dann weiter.

Bzgl. andere "Datenquellen" außer Datenbank: Du kannst ja auch, soweit ich mich dunkel errinnere eigene Klassen anbinden. Oder irre ich mich hier gewaltig?
In meinen Fall lade ich eine der DataTables mittels ExecQuery aus der Datenbank. Da hier ohne DataAdapter etc. findet meiner Meinung nach keine "echte" Bindung zu einer Datenbank statt. Die andere DataTable (weitere Combos) erstelle ich vollständig im Code.
 
Hallo Sebastian,

aha, danke für die Info.
Ich denke aber das es mit einer Instanz der Bindingsource
nicht mehr klappt. Kannst ja mal berichten.

Du hast natürlich Recht...
Man kann auch eigene Klassen oder DataTables ohne DB als
Bindingsource verwenden. War etwas voreilig von mir.

Gruß
Jens
 

Neue Beiträge

Zurück