Entwickler-Ecke

WinForms - List<> an Combobox binden


Talemantros - Mo 14.04.14 19:45
Titel: List<> an Combobox binden
Hallo,
ich habe eine Methode, die eine List<string> zurück liefert mit Werten, die ich in einer Combobox anzeigen lassen möchte.
Momentan tue ich dies so:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            List<string> liste = new List<string>();
            liste = ChangeLogMethods.GetValuesForCombobox(0, connStr, "version");

            foreach (string element in liste)
            {
                cmbVersion.Items.Add(element);
            }

            liste.Clear();


Das funktioniert auch, allerdings denke ich, dass das durchlaufen mit der Schleife vielleicht unnötig ist.
Mit DataSource oder ähnlichen bekomme ich es aber nicht hin.

Kann mir wer sagen, ob ich das so lassen soll, oder wie ich es umbauen könnte?

Danke
Gruß


Christian S. - Mo 14.04.14 19:51

Du könntest

C#-Quelltext
1:
cmbVersion.Items.AddRange(list.ToArray());                    

verwenden. Das ist zumindest vom Quelltext her kürzer, aber ob das wirklich effizienter ist, wage ich zu bezweifeln.


Talemantros - Mo 14.04.14 19:56

Hi,
danke für deine Antwort.
Also ist mein grundsätzliches herangehen ok?

Oder sollte ich es ganz anders lösen, wenn ich die Combobox mit Werten aus einer DB füllen will.

Danke

Gruß


Christian S. - Mo 14.04.14 20:44

Hm, ich sehe gerade, dass Du der DataSource-Eigenschaft auch einfach die Liste zuweisen kannst.

In WinForms weiß ich nicht, ob es da bessere Möglichkeiten gibt, bei WPF würde ich eher auf Listen setzen, bei denen die anzeigenden Komponenten Änderungen in der Liste automatisch widerspiegeln.


Ralf Jansen - Mo 14.04.14 20:53

Zitat:
Oder sollte ich es ganz anders lösen, wenn ich die Combobox mit Werten aus einer DB füllen will.


Kommt drauf an. Ob du es so oder anders machen solltest hängt davon ab was du im Anschluss mit der Auswahl anstellt.
Wenn du nur strings in die ComboBox Liste wirfst um sie anzuzeigen ist es fast egal wie die dahin kommen aber meist soll ja auch noch irgendwas damit passieren.


Talemantros - Mo 14.04.14 21:23

Hi,
Die Combobox enthält am Ende Versionsnummern der Anwendung und soll dann bei Auswahl eines Wertes die dazugehörigen Datensätze anzeigen

Die Frage gehört auch zu http://www.entwickler-ecke.de/topic_Grundsaetzliche+Frage+zu+Modelklassen_112917.html

Gruß


Ralf Jansen - Mo 14.04.14 21:39

Dann ist das so okay.
Aber wie Christian bereits andeutete sollte ein einfaches zuweisen zur DataSource Property auch funktionieren. Also ein


C#-Quelltext
1:
cmbVersion.DataSource = ChangeLogMethods.GetValuesForCombobox(0, connStr, "version");                    


Der Name GetValuesForCombobox ist etwas unglücklich. Du solltest die Methode danach benennen was sie macht bzw., da sie mit dem Wörtchen Get beginnt, danach was sie liefert.
Stell dir vor du bräuchtest die selben Daten an anderer Stelle. Würdest du ein 2.te Methode (z.B. GetValuesForListBox) schreiben die das gleiche macht aber dann so heißt wie der Context des weiteren Aufrufers? Ne, das würde wenig Sinn machen. Lass zumindest das ForComboBox weg wenn dir nicht noch was sinnigeres einfällt.


Talemantros - Di 15.04.14 12:20

Hallo,
vielen Dank für eure Antworten.
Habe die Comboboxen nun gebunden und den Namen der Methode geändert.
Werde ich demnächst immer so handhaben. Danke für den Tip.

Die Listboxen zeigen zwar nun standartmäßig den ersten zugewiesenen Wert an, aber dies habe ich mit

C#-Quelltext
1:
cmbVersion.SelectedIndex = -1;                    


behoben.

Komme heute vermutlich leider nicht mehr dazu, werde mich aber spätestens morgen dann noch mit den Hinweisen aus
http://www.entwickler-ecke.de/viewtopic.php?p=685847#685847
beschäftigen

Habe noch einiges ergoogelt um hoffetnlich hier noch was zu reißen :-)
http://www.entwickler-ecke.de/topic_Aufbau+meiner+ersten+MySQL+Datenbank_112918.html

Vielen lieben Dank

Gruß