Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - mehrere Objekte aus einer Datenbank in ein Item einer Combox
Adler87 - Di 24.06.08 16:26
Titel: mehrere Objekte aus einer Datenbank in ein Item einer Combox
Ich hab ein kleines Problem mit eines meiner Programme.
Folgendes:
Beim Starten des Programmes soll eine Combobox mit den Namen der Mitarbeiter geöffnet werden. Wurde ein Mitarbeiter ausgewählt soll sich eine weiter Combobox gefüllt werden mit den Projekten an denen er arbeitet bzw gearbeitet hat.
Die Datenbank ist simple aufgebaut:
tab_mit
- M_Nr //PS
- M_Name
tab_pro
- P_Nr //PS
- P_Name
tab_mit2 //quasi die Verbindungstabelle
- M_Nr //PS
- P_Nr //PS
Die Werte für die Mitarbeiter-Combobox holt er sich folgenderweise.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| cmd = new OleDbCommand("SELECT M_Nr, M_Name FROM tab_mit", con); dr = cmd.ExecuteReader();
this.cb_mit.Items.Add("Bitte wählen");
while (dr.Read()) { this.cb_mit.Items.Add(dr.GetString(1)); } |
Nun könnte ich die Namen der Projekte mit
"SELECT P_Name FROM tab_pro, tab_mit, tab_mit2 WHERE tab_pro.P_nr = tab_mit2.P_Nr AND tab_mit2.M_nr = tab_mit.M_Nr AND tab_mit.M_Name = '"+cb_mit.selectedItem.ToString()+"'"
rausholen.
Nur schlecht, wenn 2 Mitarbeiter den gleichen Namen haben. Es wäre schön, wenn ich die M_Nr mit in das Item mit reinschreiben könnte ohne das sie angezeigt wird oder hat jemand noch eine andere Idee?
Für Antworten bedank ich mich schon mal im Vorfeld...
Adler
Moderiert von
Christian S.: Quote- durch C#-Tags ersetzt
Christian S. - Di 24.06.08 16:46
Hi und :welcome:!
Ich würde die Mitarbeiter in einer Klasse abbilden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| public class Mitarbeiter { public string Name { get; set; }
public int id; public int Id { get { return id; } } public Mitarbeiter(int aId, string aName) { this.id = aId; this.Name = aName; } public override string ToString() { return this.Name; } } |
Und dann kannst Du die Combobox so befüllen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| cmd = new OleDbCommand("SELECT M_Nr, M_Name FROM tab_mit", con); dr = cmd.ExecuteReader();
this.cb_mit.Items.Add("Bitte wählen");
while (dr.Read()) { this.cb_mit.Items.Add(new Mitarbeiter(dr.GetInt32(0), dr.GetString(1))); } |
Und bei Auswahl:
C#-Quelltext
1:
| int selectedId = ((Mitarbeiter) cb_mit.selectedItem).Id; |
Du solltest auch mit Parametern arbeiten, anstatt die Id direkt in den Sql-String zu packen.
Grüße
Christian
Adler87 - Di 24.06.08 21:41
besten dank :wink:
werde ich gleich mal versuchen
Adler87 - Mi 25.06.08 13:32
Ich bekomme den Fehler
Fehler 1 "Mitb.Mitarbeiter.Name.get" ist nicht als abstrakt oder extern deklariert und muss daher einen Text deklarieren. C:\Dokumente und Einstellungen\xxxx\Desktop\xxxxxx\Projekte\Mitdb\Mitdb\mit.cs 9 30 Mitdb
Das Gleiche bei set...
Christian S. - Mi 25.06.08 13:36
Ich habe die Kurzschreibweise von Properties bentuzt, welche ab C# 3.0 gilt. Wenn Du C# 2.0 hast, musst Du natürlich einen Getter und Setter definieren, ebenso ein privates Feld.
Adler87 - Mi 25.06.08 17:53
klasse, besten Dank... :)
Ich hab bisher kaum mit Klassen gearbeitet, darum musste ich noch etwas rumprobieren, aber jetzt klappt es....
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!