Entwickler-Ecke

Basistechnologien - Problem mit Relations für Steuerelemente


dinazavric - Fr 29.04.11 09:47
Titel: Problem mit Relations für Steuerelemente
Hallo,

im folgenden Code wird eine Relation erstellt, die dann auf die ComboBoxes übertragen wird. So werden je nach dem ausgewählten Parameter die möglichen Werte dazu aufgelistet.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            dataSet2.Relations.Add("ParameterProperties", dataSet2.Tables["Parameters"].Columns["ParameterName"], dataSet2.Tables["ParameterValues"].Columns["ParameterName"]);
            
            P1_Name.DisplayMember = "Parameters.ParameterName"
            P1_Name.ValueMember = "Parameters.ParameterName";
            P1_Name.DataSource = this.dataSet2;
            P1_Value.DisplayMember = "Parameters.ParameterProperties.ValueDefinition";
            P1_Value.ValueMember = "Parameters.ParameterProperties.ParameterName";
            P1_Value.DataSource = this.dataSet2;

was nun, wenn ich eine weitere ComboBox benötige um bspw. noch einen Parameter zu beschreiben? Ich habe es genau so erstellt:


C#-Quelltext
1:
2:
3:
4:
5:
6:
            P2_Name.DisplayMember = "Parameters.ParameterName";
            P2_Name.ValueMember = "Parameters.ParameterName";
            P2_Name.DataSource = this.dataSet2;
            P2_Value.DisplayMember = "Parameters.ParameterProperties.ValueDefinition";
            P2_Value.ValueMember = "Parameters.ParameterProperties.ParameterName";
            P2_Value.DataSource = this.dataSet2;

Das Problem, dass ich hier bekomme ist, dass wenn ich in der P2_Name-ComboBox einen anderen Parameter auswählen will, ändert sich der erste Parameter in P1_Name-ComboBox. Ich möchte aber die Möglichkeit haben sie unabhängig von einander zu bearbeiten um so zwei Parameter bspw. einem Protokoll zuzuweisen.
Wie geht das?


Th69 - Fr 29.04.11 14:47

Hallo,

da du jeweils die gleiche DataSource verwendest, synchronisierst du somit die beiden ComboBoxen (der eigentliche Sinn vom DataBinding ;-).
Es gibt noch die Klasse BindingSource, welche du dazwischen schalten könntest, d.h. jeweils:

C#-Quelltext
1:
2:
3:
4:
BindingSource bs = new BindingSource();
bs.DataSource = dataset;

comboBox.DataSource = bs;

Also für jedes Steuerelement eine eigene BindingSource (mittels new) erstellen.

P.S.
Und BITTE poste NICHT in verschiedenen Foren gleichzeitig dieselbe Frage, dies ist sehr unhöflich den möglichen Antwortgebern gegenüber.
Cross-Post: http://www.mycsharp.de/wbb2/thread.php?threadid=95166

Erst wenn du einige Stunden keine Antwort erhalten hast, dann kannst du dich evtl. an ein anderes Forum wenden (und hier dann auf den Cross-Post hinweisen).


dinazavric - Fr 29.04.11 15:08

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:

Und BITTE poste NICHT in verschiedenen Foren gleichzeitig dieselbe Frage, dies ist sehr unhöflich den möglichen Antwortgebern gegenüber.


OK, verstehe


dinazavric - Fr 29.04.11 15:25

Zitat:

da du jeweils die gleiche DataSource verwendest, synchronisierst du somit die beiden ComboBoxen (der eigentliche Sinn vom DataBinding ;-).
Also für jedes Steuerelement eine eigene BindingSource (mittels new) erstellen.


Vielen Dank, das hat funkzioniert. Kann man aber auch hier machen, dass wenn die ComboBoxes zum ersten mal erscheinen (beim Fensteröffnen), dass in denen entweder nicht steht, so dass der Benutzer erst selber die Auswahl treffen soll, oder ein bestimmter Wert, falls es vorher deniniert wurde (in dem Fall egal wie, bspw. in einer Tabelle vorgespeichert...)


IsNull - Fr 29.04.11 16:16

Die Properties von der ComboBox -> SelectedItem und SelectedIndex sollten reichen ;)

Bei solchen Fragen würde eine Google-Suche schneller Antworten liefern als in einem Forum auf eine Antwort zu warten ;)


dinazavric - Fr 29.04.11 16:19

user profile iconIsNull hat folgendes geschrieben Zum zitierten Posting springen:
Die Properties von der ComboBox -> SelectedItem und SelectedIndex sollten reichen ;)

Bei solchen Fragen würde eine Google-Suche schneller Antworten liefern als in einem Forum auf eine Antwort zu warten ;)


Ja, hast Recht ;-) hab hier eigentlich die Frage automatisch reingeschrieben :-) Danke!