Entwickler-Ecke
WinForms - zwei DataTable-Spalten als DisplayMember von ComboBox
Realnub - Mo 21.04.08 08:27
Titel: zwei DataTable-Spalten als DisplayMember von ComboBox
hi, ich habe ein DataTable von diesem 2 Spalten in einer ComboBox angezeigt werden sollen - wie mache ich das?
Eine Spalte ist ja kein Problem, aber wie zusammen?
C#-Quelltext
1:
| cbox.DisplayMember = "Spalte1" + "Spalte2"; |
geht natürlich nicht.
maro158 - Mo 21.04.08 09:25
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| DataColumn column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "CompanyContact"; column.Expression = "[Company Name] + '->' + [Contact Name]";
this.northwindDataSet.Customers.Columns.Add(column); DataView view = new DataView(this.northwindDataSet.Customers);
this.customersBindingSource.DataSource = view; customersComboBox.DisplayMember = "CompanyContact"; |
JüTho - Mo 21.04.08 10:11
@maro158
Zwei Sätze zur Erläuterung wären für einen Neuling wirklich nützlich.
@Realnub
Es kann grundsätzlich nur eine Spalte angezeigt werden. Maro schlägt deshalb vor, eine zusätzliche "berechnete Spalte" zu erzeugen, die die beiden Spalten in einer weiteren zusammenfasst; der Inhalt dieser Spalte soll dann angezeigt werden.
Eine fertige Lösung wäre z.B.
Multi-Column ComboBox [
http://www.codeproject.com/KB/miscctrl/MultiColumnComboBoxLinked.aspx]. Die Verwendung in einem DataGridView verlangt dann allerdings weitere Anpassungen (ist also vermutlich nichts für Anfänger).
Gruß Jürgen
Realnub - Mo 21.04.08 10:29
danke euch beiden, werde das so machen. falls ich probleme bekommen sollte, melde ich mich natürlioch wieder.
maro158 - Mo 21.04.08 18:26
JüTho hat folgendes geschrieben: |
@maro158
Zwei Sätze zur Erläuterung wären für einen Neuling wirklich nützlich. |
Du hast ohne Zweifel recht. Wenn ich ehrlich bin, scheute ich mich etwas davor, berechnete Spalten, DataView, IList, Properties und eventuell noch BindingSource zu erklären. Da hat sich die Gewissheit, dass mein Code selbstbeschreibend ist, wie von selbst eingestellt... Wenigstens ein Hinweis darauf wäre sicherlich sinnvoll gewesen.
Realnub - Mo 21.04.08 20:13
ich frag am besten hier noch mal
die Combobox ist schon wie vermutet in einem DataGridView. Mein Problem ist nun sozusagen der anfängliche SelectedIndex. Wie setzt man diesen? Habe gegoogelt, aber die Tipps haben nicht funktioniert.
//Im Mom ist es so, das die Combobox(en) quasi leer erscheinen, wenn man sie nicht aufgeklappt hatte.
JüTho - Di 22.04.08 09:35
SelectedIndex ist nicht praktisch (auch wenn es mit Klimmzügen ginge): Du benötigst ja in jeder Zeile einen anderen Wert, der vom Inhalt der Haupttabelle abhängt.
Auf das Verfahren hatte ich bereits unter
ComboBox in DataGridView [
http://www.c-sharp-forum.de/viewtopic.php?t=82629] hingewiesen. Wichtig ist dabei vor allem
DataPropertyName.
Jürgen
Realnub - Di 22.04.08 10:27
ok, danke
steck noch nicht so in der materie drinne und komme immermal durcheinander :)
maro158 - Di 22.04.08 10:54
Ich gehe hier von einem Northwind-Setting aus. In einem DataGridView wird die Tabelle Orders dargestellt. Die Spalte die an Orders.[Customer ID] gebunden ist, soll als ComboBox dargestellt werden und ihre Elemente aus der Tabelle Customers beziehen. Gleichzeitig soll die ComboBox dem Benutzer aber einen berechneten Wert darstellen, der sich aus der Kombination zweier Felder der Combo-Datenquelle zusammensetzt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| DataColumn column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "CompanyContact"; column.Expression = "[Company Name] + '->' + [Contact Name]";
this.northwindDataSet.Customers.Columns.Add(column);
DataView view = new DataView(this.northwindDataSet.Customers);
this.customersBindingSource.DataSource = view;
dataGridViewComboBoxColumn.DataSource = this.customersBindingSource; dataGridViewComboBoxColumn.DataPropertyName = "Customer ID"; dataGridViewComboBoxColumn.ValueMember = "Customer ID"; dataGridViewComboBoxColumn.DisplayMember = "CompanyContact"; |
Ich hoffe diesmal, etwas klarer gewesen zu sein.
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!