Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - Aus MS Access Datenbank befüllte ComboBox sortieren
Parn - Mi 04.04.12 14:38
Titel: Aus MS Access Datenbank befüllte ComboBox sortieren
Hallo,
ich beschäftige mich zum ersten mal intensiver mit C# und bin hier an meine Grenzen gestoßen.
Ich hoffe, ihr könnt mir hier weiterhelfen.
Ich habe ein Programm geschrieben, das Zugriff auf eine MS Access Datenbank hat. Die Datenbank beinhaltet mehrere Tabellen.
Nun will 2 ComboBoxen mit je einer Spalte aus einer dieser Tabellen füllen. Dazu habe ich im "Datenbindungsmodus" eine "Datenquelle" eingetragen und ein "Member" ausgewählt.
Dies funktioniert soweit auch. Das Problem ist jedoch, dass Doppelnennungen möglich sind und die zweite ComboBox immer alle Namen zeigt.
Nehmen wir als Beispiel zum besseren Verständnis also an, dass die Tabelle wie folgt aussieht:
NAME VORNAME
Geiger Ingrid
Meierl Thomas
Dester Tobias
Geiger Stefan
Ich möchte nun, dass in der ersten Combobox folgendes zur Wahl steht:
Geiger
Meierl
Dester
Wenn man nun "Geiger" auswählt, soll in der zweiten ComboBox nur noch "Ingrid" und "Stefan" zur Wahl stehen.
Sollte "Meierl" gewählt werden, sollte in der zweiten Box automatisch nur noch "Thomas" angeboten werden.
Ich freue mich auf jede konstruktive Antwort!
mfg Parn
Th69 - Mi 04.04.12 16:27
Hallo parn :welcome:
mit welcher Technologie greifst du denn auf die Datenbank zu (ADO.NET, Linq2Sql, ...)?
Wenn du direkt mit SQL arbeitest, so kannst du mittels
SQL-Anweisung
1:
| SELECT DISTINCT Name FROM Tabelle |
dir alle doppelten Namen rausfiltern lassen.
Um dann in der 2. ComboBox nur noch die zugehörigen Vornamen anzeigen zu lassen, solltest du im SelectedIndex-Ereignis der ersten ComboBox (Name) diese entsprechend filtern:
SQL-Anweisung
1:
| SELECT Vorname FROM Tabelle WHERE Name = :Name |
(:Name ist dabei der ausgewählte Name - arbeite hierzu am besten mittels
SQL: Parameter von Befehlen [
http://www.mycsharp.de/wbb2/thread.php?threadid=66704]).
Wenn du nicht weiterkommst, so darfst du auch gerne etwas (relevanten) Code zeigen.
Parn - Mi 04.04.12 17:25
Hallo und danke für die Antwort.
Ich arbeite mit SQL. Und ich habe mit DISTINCT auch schon versucht hinzukommen.
relevanten Code kann ich hierzu nicht wirklich angeben, da ich das ja an der ComboBox einstelle(n will).
die SQL Anweisung ist bisher:
SQL-Anweisung
1: 2:
| SELECT Name, Vorname, Wohnort, ID FROM Mitglieder |
Ich habe bei beiden ComboBoxen "An Daten gebundene Elemente anbinden" angekreuzt und da dann als Datenquelle "MitgliederBindingSource" ausgewählt. Bei der ersten Box entsprechend "Name", bei der 2. "Vorname".
Nun stehen da aber eben in der ersten Box auch doppelte Einträge und in der zweiten alle, unabhängig von dem, was in der ersten angeklickt ist.
Wenn ich jetzt "SELECT DISTINCT Name FROM Mitglieder" nutze, dann funktioniert "Insert, Update und Delete" nicht mehr (vermutlich weil ich dazu alle Spalten ausgewählt haben muss, was ich mit "SELECT DISTINCT Name" ja automatisch nicht habe), was ich aber intensiv nutze...
Das muss doch einfacher zu handeln sein?
Moderiert von
Th69: SQL-Tags hinzugefügt
Th69 - Mi 04.04.12 17:35
Nein, einfacher geht es nicht - du brauchst schon für jede Situation eine eigene Datenquelle (d.h. einen entsprechenden SQL-Befehl).
Alternativ könntest du verschiedene BindingSources verwenden (und dort dann Filterung sowie Sortierung anders behandeln).
Parn - Do 05.04.12 11:15
Hallo noch mal,
ich habe es nun mit mehrerern Datenquellen so hingekriegt, dass die erste ComboBox sortiert wird, und auch keine Doppelnennungen mehr auftreten.
Bei der zweiten ComboBox funktioniert die Abfrage aber nicht wie gewünscht. Ist sicher nur ne Kleinigkeit in der Syntax, aber ich komme einfach nicht drauf.
Derzeit sieht es bei der zweiten ComboBox so aus:
SQL-Anweisung
1: 2: 3: 4:
| SELECT Vorname FROM Mitglieder WHERE (Name = 'ComboBox1.Text') ORDER BY Vorname |
Das Funktioniert aber leider nicht. Wenn ich aber nun
SQL-Anweisung
1: 2: 3: 4:
| SELECT Vorname FROM Mitglieder WHERE (Name = 'Maier') ORDER BY Vorname |
schreibe, dann geht es für "Maier". D.h. wohl, dass ich falsch auf den Text in der ersten ComboBox zugreife?
Danke für eure Hilfe!
Moderiert von
Th69: SQL-Tags hinzugefügt
lothi - Do 05.04.12 12:20
Hallo Parn
Arbeite mit Parameter wie oben schon gesagt und verlinkt.
Benutze den Debugger, dann siehst du auch was du dem SQL-String übergibst.
Dein 1. SQL-Befehl würde funktionieren wenn in deiner Tabelle ein Name "ComboBox1.Text" existieren würde.
Wegen den '' übergibst du nicht den Inhalt sondern die Beschreibung ComboBox1.Text. Du musst den den Text auslesen und diesen dann in '' eingebettet dem SQL_String hinzufügen, was aber wenn du mit Parameter arbeitest dir ADO.Net abnehmen würde.
Gruss Lothi
Parn - Di 10.04.12 17:03
Hallo,
Danke nochmal für eure Hilfe, ich habe es jetzt mehr schlecht als recht hingebracht ;)
mfg Parn
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!