Laden...

2 Comboboxen: Inhalt wechselseitig abhängig von der Auswahl in der jeweils anderen Box

Erstellt von Tommy111 vor 11 Jahren Letzter Beitrag vor 11 Jahren 2.093 Views
Thema geschlossen
T
Tommy111 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren
2 Comboboxen: Inhalt wechselseitig abhängig von der Auswahl in der jeweils anderen Box

Hallo Zusammen,
ich habe eine Problem....
und zwar habe ich 2 Comboboxen deren Werte (aus eine SQL DB) abhängig von einander sind Beispiel:
ist in CB1 der das Projekt 1 gewählt werden in CB2 nur die Tests angezeigt die zu diesem Projekt gehören....
und anderstrum
also wenn in CB2 ein test gewählt wird sollen in CB1 nur die Projekte angezeigt werden die auch zu diesem Test gehören.

bisher bin ich soweit gekommen


      private void cbProject_SelectedIndexChanged(object sender, EventArgs e)
        {
            project = cbProject.SelectedItem as Project;
            dtpEndDate.Value = project.endDate.Value;
            dtpStartDate.Value = project.startDate.Value;

                setups = session.QueryOver<TestSetup>()
                     .OrderBy(ts => ts.testSetupName).Asc
                     .JoinQueryOver<Project>(ts => ts.Projects)
                     .Where(p => p.id == project.id)
                     .List();
                ;
                cbSetUp.Items.Clear();
                cbSetUp.Items.AddRange(setups.ToArray());
        }

        private void cbProject_Format(object sender, ListControlConvertEventArgs e)
        {
            project = e.ListItem as Project;
            if (project == null)
                return;
            e.Value = project.projectName + " " + project.jobNumber;
        }

        private void cbSetUp_Format(object sender, ListControlConvertEventArgs e)
        {
            testSetUp = e.ListItem as TestSetup;
            if (testSetUp == null)
                return;
            e.Value = testSetUp.testSetupName +" "+ testSetUp.setupNumber;
        }

        private void cbSetUp_SelectedIndexChanged(object sender, EventArgs e)
        {
            TestSetup ts = cbSetUp.SelectedItem as TestSetup;

                projects = session.QueryOver<Project>()
                    .OrderBy(p => p.projectName).Asc
                    .JoinQueryOver<TestSetup>(p => p.TestSetups)
                    .Where(p => p.id == ts.id)
                    .List();
                ;
                cbProject.Items.Clear();
                cbProject.Items.Add("");
                cbProject.Items.AddRange(projects.ToArray());
                cbProject.ValueMember = project.projectName;
            CheckAllValues();
        }

das Problem ist allerdings wenn ich in der einen CB was auswähle wird der der anderen wieder gelöscht....
also wähle i cb1 aus dann stehen in cb2 die richtigen Einträge zur Verfügung wähle ich in cb2 etwas aus wird der wert in cb1 wieder gelöscht.

Kann mir jemand helfen???
Vielen Dank schon mal

6.862 Beiträge seit 2003
vor 11 Jahren

Hallo,

du clearst ja die jeweils andere ComboBox. Im Fall das dein Query nichts zurückliefert, bleben die halt dann leer.

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Tommy111,

du meinst eine ständige unerwünschte endlose gegenseitige Beeinflussung? Das wäre eine Fall für [FAQ] Event nur bei Benutzeraktion auslösen, nicht bei programmtechnischer Änderung.

herbivore

T
Tommy111 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren

Hallo,

du clearst ja die jeweils andere ComboBox. Im Fall das dein Query nichts zurückliefert, bleben die halt dann leer.

ja das muss ich machen da ich ja bevor in einer cb etwas ausgewählt ist in beiden ja alle möglichen auszahlen bereitstelle.... wenn dann eine cb gewählt ist muss ich die andere liste ja clearen und die neuen einträge einfügen wenn i das nicht mache habe i die einträge ja doppelt drin...

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Tommy111

wenn i das nicht mache habe i die einträge ja doppelt drin...

Der ComboBox kann auch eine DataSource zugewiesen werden. Danach könntest du anstatt alle Items löschen und neu hinzufügen, einfach die Source filtern.

Beste Grüsse

Diräkt

T
Tommy111 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren

Hallo Diräkt,

Hallo Tommy111
Der ComboBox kann auch eine DataSource zugewiesen werden. Danach könntest du anstatt alle Items löschen und neu hinzufügen, einfach die Source filtern.

das "klingt" gut 😃 hast du zufällig ein codebsp.???

S
211 Beiträge seit 2010
vor 11 Jahren

Ich hab das Problem so verstanden das es Schwierigkeiten macht das die CBs voneinander abhängig sind.

Sprich wenn er in CB1 ein Projekt wählt, kriegt er in CB2 die zugehörigen Tests gezeigt. Wählt er in CB2 jetzt einen der Tests zur Weiterarbeit wird ihm aber CB1 ungewollt wieder verändert, weil nicht unterschieden werden kann ob er jetzt einen Test auswählen will oder alle Projekte zu einem Test in CB1 anzeigen will.

Aber vlt hab ichs auch falsch verstanden 😃

T
Tommy111 Themenstarter:in
5 Beiträge seit 2012
vor 11 Jahren

Hallo scrabbl,

ja genau das ist mein Problem ...
die eine cb reagiert immer auf die andere aber wenn bei der einen mal was ausgewählt wurde solle das nicht mehr vom Programm geändert werden ... nur vom Benutzer

Hinweis von herbivore vor 11 Jahren

Dazu haben ich bereits oben eine Lösung genannt. Auch die anderen Nachfragen deuten darauf hin, dass das Problem eher bei [Hinweis] Wie poste ich richtig? Punkt 1.1.1 liegt. Natürlich ist es kein Problem sicherzustellen, dass bei einer Aktualisierung die neuen Einträge die alten Ersetzen statt einfach hinzugefügt zu werden. Zum Thema Codebeispiele siehe Punkt 4.

Thema geschlossen