Autor Beitrag
Adler87
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 24.06.08 17:26 
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.

ausblenden 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 user profile iconChristian S.: Quote- durch C#-Tags ersetzt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 24.06.08 17:46 
Hi und :welcome:!

Ich würde die Mitarbeiter in einer Klasse abbilden:
ausblenden 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:
ausblenden 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))); //bin mir bei GetInt32(0) nicht sicher, aber sollte klar sein, was das ist ;-)
}


Und bei Auswahl:
ausblenden 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

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Adler87 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Di 24.06.08 22:41 
besten dank :wink:

werde ich gleich mal versuchen
Adler87 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 25.06.08 14: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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 25.06.08 14: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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Adler87 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 25.06.08 18:53 
klasse, besten Dank... :)

Ich hab bisher kaum mit Klassen gearbeitet, darum musste ich noch etwas rumprobieren, aber jetzt klappt es....