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

punisher86

Mitglied
Hallo Leute,

ich programmiere gerad ein wenig und stehe nun vor einem Problem. Ich möchte eine Textdatei in eine Combobox laden. Das ist auch gar kein Problem soweit.

Meine txt-datei sieht so aus:

23347823;vorname;nachname;beruf

Das Problem ist das in der ComboBox die Komplette Zeile angezeigt wird, ich möchte aber nur die Zahl oder nur den vornamen. Den Rest möchte ich in labels anzeigen unter der combobox. allerdings zwingt mich das ein wenig in die Knie. Könntet ihr mir helfen? Das einladen in die combobox sieht momentan wie folgt aus:

Code:
            StreamReader sr = new StreamReader("mitarbeiter.dat");
            string zeile;
            while ((zeile = sr.ReadLine()) != null)
            {
                comboBox1.Items.Add(zeile);
            }
            sr.Close();
 
Hi

Ich würde dir empfehlen, mit der Methode String.Split jede einzelne Zeile zuerst in ihre einzelnen Werte zu teilen.
Diese steckst du in eine von dir entwickelte Datenstruktur.
Bei dieser Datenstruktur überschreibst du die Methode ToString. Diese liefert dann den von dir gewünschten Wert zurück.
In die ComboBox packst du Objekte dieser Stuktur. Das SelectedItem etc kanst du wieder in deine Struktur casten.
 
Danke Nico für deine antwort. Ich habe mich gerad zum ersten mal mit der split-methode beschäftigt.
Also ich habe es bis jetzt so geschafft:

Code:
        public void LoadConfig()
        {
             
            StreamReader sr = new StreamReader("mitarbeiter.dat"); 
            string data;
            while ((data = sr.ReadLine()) != null)
            {
                string[] zeile = data.Split(';');
                for (int i = 0; i < zeile.GetLength(0); i++)
                {
                   string ausgabe = ""; 
                    ausgabe += zeile[i] + "\r\n";
                    comboBox1.Items.Add(ausgabe);
                }
            }
            sr.Close();
        }

Allerdings werden da wohl die sachen gesplittet aber alles untereinander in der combobox angezeigt. Wie schaffe ich es nur, nur Namen oder den Mitarbeitercode anzuzeigen?

MFG
 
deine Zeile sieht wie folgt aus:
23347823;vorname;nachname;beruf

nun sagst du diese Zeile soll nach Semikolon getrennt werden, du bekommst also ein Array mit der Länge 4

Code:
string[] zeile = data.Split(';');
gibt also zurück
zeile[0]=23347823
zeile[1]=vorname
zeile[2]=nachname
zeile[3]=beruf

wenn du jetzt den Vornamen in die Cobobox setzen willst musst du also
Code:
comboBox1.Items.Add(zeile[1]);
aufrufen.
 
ach stimmt :) wo du es sagst!

nu hab ich es so:

Code:
       public void LoadConfig()
        {
            
            StreamReader sr = new StreamReader("mitarbeiter.dat"); 
            string data;
            
            while ((data = sr.ReadLine()) != null)
            {
                string[] zeile = data.Split(';');
                for (int i = 0; i < zeile.GetLength(0); i++)
                {
                    comboBox1.Items.Add(zeile[1]);
                }
            }
            sr.Close();
        }

Allerdings wird so angezeigt:

vorname1
vorname1
vorname1
vorname1
vorname2
vorname2
vorname2
vorname2

Liegt das an der while-schleife das der die vier mal ausgibt?

MFG
 
Zuletzt bearbeitet:
Ich pappnase ey :) sorry habs schon ;) man sollte auch dann die for-schleife weg machen :)

aber noch was kurzes. Gibt es die Möglichkeit wenn ich einen namen ausgewählt habe den rest der zeile verteilt auf labels auszugeben?

mfg
 
das war wohl die Idee die Nico hatte.

du erstellst dir eine Klasse und überschreibst die ToString Methode
Code:
class Mitarbeiter
{
   uint MitarbeiterId;
   string Vorname;
   string Nachname;
   string Beruf;

   public ovverider string ToString()
   {
         return Vorname;
   }
}
(Achtung Klasse nicht vollständig!)

die Klasse füllst du nun mit deinen angaben und übergibst das Objekt an die Items.Add Methode der Combobox.
Durch überschreibung der ToString Methode wird automatisch der Vorname in der Combobox angezeigt.

Über die Eigenschaft SelectedItem der Combobox kannst du dein Mitarbeiter Objekt auslesen und die Werte an deine Labels verteilen.
 
Code:
die Klasse füllst du nun mit deinen angaben und übergibst das Objekt an die Items.Add Methode der Combobox

wie funktioniert das genau? das verstehe ich noch nicht so ganz.

Habe die Klasse wie folgt: (hoffe das is richtig :))

Code:
class Mitarbeiter
    {
        string barcode;
        string name;
        string fachbereich;
        string beruf;

        public ovverider barcode.ToString()
        {
         return barcode;
        }

        public ovverider name.ToString()
        {
            return name;
        }

        public ovverider fachbereich.ToString()
        {
            return fachbereich;
        }

        public ovverider beruf.ToString()
        {
            return beruf;
        }

    }
 
falsch
was du gemachst hast ist Funktionen und Eigenschaften zu vermischen
C#:
class Mitarbeiter
{
   public string Vorname;
   public string Nachname;
   public string Beruf;
   public uint MitarbeiterId;

   public override string ToString()
   {
        return Vorname;
   }
}
Im Prinzip ähnlich wie in meinem ersten Entwurf außer das ich hier noch den Modifiert public setzte. So sind die Felder auch außerhalb der Klasse Mitarbeiter verfügbar.
(Wenn du dich später näher mit Klassen beschäftigt hast solltest du dir Eigenschaften/Propertys mal näher anschauen)

Ovveride bezeichnet das wir etwas überschreiben wollen, in diesem falle die ToString Methode.
Eigentlich kann man diesen Modifierer nur anwenden wenn eine Klasse von einer anderen Klasse erbt.
Und genau hier ist das Geheimnis, alle Objekte in C# erben intern von Object.
Weshalb die Funktionen wie ToString, GetHashCode oder Equals überschreiben kannst ohne explizit eine Elternklasse angegeben zu haben.

Hoffe war verständlich ;)
 
Zuletzt bearbeitet von einem Moderator:
ahh das war schon verständlicher für mich :) sorry bin noch relativ in den anfängen. Allerdings ist dies:

Code:
        public ovverider string ToString()
        {
            return Vorname;
        }

fehlerhaft: "Error 1 Invalid token 'string' in class, struct, or interface member declaration E:\Zeiterfassung\Zeiterfassung\Mitarbeiter.cs 15 26 Zeiterfassung
"
:)

Aber wie genau übergebe ich die Daten? Er muss doch genau wissen welchen bereich aus dem array er haben soll?

mfg
 

Neue Beiträge

Zurück