[C#] Nur bestimmte Teile in ComboBox laden?!

ach override war nur falsch geschrieben..oh man ich idiot :eek: nun ja ich mach mich gerad noch ein wenig schlau wie das funktioniert aber viel weiter komm ich momentan nicht :confused:
 
mit dem ToString überschreiben habe ich noch nie gearbeitet und ich hänge einfach daran wie ich die Daten aus einer bestimmten Zeile an die Klasse übergebe und nachher auslese. Habe gerade noch was im Internet gefunden aber da komm ich auch nicht mit weiter. Ich steh momentan echt auf dem Schlauch :eek: :confused:
 
Hallo Punisher,

lass mich mal versuchen dir das zu erklären:

Angenommen du hast ein File mit Datensätzen:

Code:
001;Vorname001;Nachname001;Beruf001
002;Vorname002;Nachname002;Beruf002
003;Vorname003;Nachname003;Beruf003
004;Vorname004;Nachname004;Beruf004
005;Vorname005;Nachname005;Beruf005

Diese machst du mit einem StreamReader auf und durchläufst sie - so, wie du es schon machst.

Code:
List<Mitarbeiter> mitarbeiterListe = new List<Mitarbeiter>(); // Definition der Klasse "Mitarbeiter" weiter unten

while((data = sr.ReadLine()) != null)
{
  string[] itemArray = data.split(','); // nun hast du ein 0-basiertes Array mit den Daten
  Mitarbeiter mitarbeiter = new Mitarbeiter(item[0], item[1], item[2], item[3]);
}

DropDownList ddl = /*DropDownList zuweisen*/
ddl.DataSource = mitarbeiterListe;
ddl.DataValueField = "Nummer";
ddl.DataTextField = "NameGesamt";  // Property könnte auch so ähnlich heißen, hab gerad keine IDE zur Hand
ddl.DataBind();

Die Klasse "Mitarbeiter" könnt so aussehen:

Code:
public class Mitarbeiter
{
  public string Nummer { get; set; }
  public string Vorname{ get; set; }
  public string Nachname { get; set; }
  public string Beruf { get; set; }

  public string NameGesamt
  {
    get { return this.Vorname + " " + this.Nachname; }
  }

  public Mitarbeiter(string nummer, string vorname, string nachname, string beruf)
  {
    this.Nummer = nummer;
    this.Vorname = vorname;
    this.Nachname = nachname;
    this.Beruf = beruf;
  }

  /* Wenn du ToString überschreibst kannst du an der Stelle zurückgeben was du willst, in dem Fall nun die Nummer
Wenn du jetzt mitarbeiterInstance.ToString(); aufrufst erhältst du die Nummer
*/
  public override ToString()
  { return this.Nummer;  }
}

So, oder ziemlich ähnlich, könnte das, was du willst, funktionieren
 
Danke für deine Antwort....:)

Code:
DropDownList ddl = /*DropDownList zuweisen*/   <----- DropDownList?
ddl.DataSource = mitarbeiterListe;
ddl.DataValueField = "Nummer";
ddl.DataTextField = "NameGesamt";  // Property könnte auch so ähnlich heißen, hab gerad keine IDE zur Hand
ddl.DataBind();

was soll das sein? DropDownList? :confused:

Irgendwie kapier ich noch net wie und wo er die Daten zur anderen Klasse schickt und wie ich diese in die Labels packen kann....Ich reiß hier gerad meine Haare aus weil ich selbst net drauf komm ey :rolleyes: :mad:

mfg
 
Ich habs jetzt mal anders gelöst.

Code:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            StreamReader sr = new StreamReader("mitarbeiter.dat");
            string data;
            List<string> Daten = new List<string>();

            while ((data = sr.ReadLine()) != null)
            {
                string[] zeile = data.Split(';');
                Daten.Add(zeile[0]);
                Daten.Add(zeile[1]);
                Daten.Add(zeile[2]);
                Daten.Add(zeile[3]);
            }
            sr.Close();

            for (int i = 0; i < Daten.Count; i++)
            {
                if (Daten[i] == comboBox1.SelectedItem.ToString())
                {
                    label7.Text = Daten[i - 1];
                    label8.Text = Daten[i];
                    label9.Text = Daten[i + 1];
                    label10.Text = Daten[i + 2];
                }
            }
        }

Eigentlich öffnet er die Datei jetzt zweimal aber so funktioniert es :-)
 
nochmal zu meiner Klasse
C#:
Mitarbeiter meinMitarbeiter=new Mitarbeiter()
meinMitarbeiter.Vorname=Zeile[0];
meinMitarbeiter.Nachname=Zeile[1];
...
combobox.Items.Add(meinMitarbeiter);
Ich hab mich bei dieser Klasse extra für öffentliche Felder entschieden um es dir nicht zu schwer zu machen, diese kannst du oben wie im Beispiel gesehen wie eine normale Variable zuweisen.

Beim SelectedIndexChanged Ereignis der Combobox kannst du das Objekt wieder auslesen und die einzelnen Werte an deine Labels verteilen.
C#:
Mitarbeiter meinMitarbeiter=combobox.SelectedItem as Mitarbeiter;
if(meinMitarbeiter!=null)
{
    vornameLabel.Text=meinMitarbeiter.Vorname;
    nachnameLabel.Text=meinMitarbeiter.Nachname;
    ...
}

Nachtrag:
Ich würde dir empfehlen für die Controls vernünftige Namen zu vergeben (siehe z.B. ähnlich meinen Label Beispielen).
So findest du dich einfach später besser zu recht.
 
Zuletzt bearbeitet von einem Moderator:
Zurück