Reputation: 580
How do i set this values? I have a DataTable with all the data i want to set in the combobox, but i cant find how to set it.
I tried
ComboBox1.DataSource = dataTable;
ComboBox1.ValueMember = "id"; // --> once hes here, he just jumps out the method
ComboBox1.DisplayMember = "name";
No compilation error, warning, nothing.. just jumps out!
This is the query to fill the DataTable
"Select * from \"Table\""
I checked with the debugger and the datatable was filled. The columns names are "id" and "name". ComboBox is blank. I'm filling it for the first time!
Upvotes: 13
Views: 138973
Reputation: 13
by combining the given examples and adding the Select_Action for the ToolStripComboBox:
private void Combobox_SelectedIndexChanged(object? sender, EventArgs e)
{
string colorIdx = ((System.Tuple<int, string>)((ComboBox)sender).SelectedItem).Item1;
string colorName = ((System.Tuple<int, string>)((ComboBox)sender).SelectedItem).Item2;
}
private void AddItemsToComboBox()
{
var myItems = new List<Tuple<int, string>>()
{
Tuple.Create(0, "Black"),
Tuple.Create(1, "White"),
Tuple.Create(2, "Red")
};
combobox.ComboBox.DataSource = myItems;
combobox.ComboBox.ValueMember = "Item1";
combobox.ComboBox.DisplayMember = "Item2";
}
Upvotes: 0
Reputation: 2969
Maybe not exactly the described issue but in my case the type name was shown in the ComboBox, not the DisplayValue, although everything seemed to be wired up correctly. It then turned out that the type's public properties were defined without getter and setter! :)
Upvotes: 0
Reputation: 1221
Using keyvalue pairs to populate a combobox
A neat way to populate combo boxes is to set the datasource to a list of keyvalue pairs. It may also inspire using data stored in a list of some kind:
//Some values to show in combobox
string[] ports= new string[3] {"COM1", "COM2", "COM3"};
//Set datasource to string array converted to list of keyvaluepairs
combobox.Datasource = ports.Select(p => new KeyValuePair<string, string>(p, p)).ToList();
//Configure the combo control
combobox.DisplayMember = "Key";
combobox.ValueMember = "Value";
combobox.SelectedValue = ports[0];
The datasource can be populated using this syntax as well:
ports.Select(p => new { Key = p, Value = p }).ToList();
The technicue may be expanded with more property names for multiple column lists.
Objects that are already key-value pairs like Dictionary items can be used directly
combobox.DataSource = new Dictionary<int, string>()
{
{0, "COM1"},
{1, "COM2"},
{2, "COM3"},
}.ToList();
combobox.ValueMember = "Key";
combobox.DisplayMember = "Value";
Tuples can be initialized and used like this
var ports= new List<Tuple<int, string>>()
{
Tuple.Create(0, "COM1"),
Tuple.Create(1, "COM2"),
Tuple.Create(2, "COM3")
};
combobox.DataSource = ports;
combobox.ValueMember = "Item1";
combobox.DisplayMember = "Item2";
Upvotes: 9
Reputation: 21
ComboBox1.ValueMember = dataTable.Columns["id"].ColumnsName; // column name which the values are not visible
ComboBox1.DisplayMember = dataTable.Columns ["name"].ColumnsName;
/*
column name that you need to select item by proprity :
ComboBox1.SelectedItem;
Or you can use easly this :
ComboBox1.Text;
*/
ComboBox1.DataSource= dataTable; //the data table which contains data
// and this should be last :)
Upvotes: 2
Reputation: 411
You should not set datasource
of your listbox and/or combobox in this order
ComboBox1.DataSource = dataTable;
ComboBox1.ValueMember = "id";
ComboBox1.DisplayMember = "name";
Instead, this is correct order:
ComboBox1.ValueMember = "id";
ComboBox1.DisplayMember = "name";
ComboBox1.DataSource = dataTable;
NOTE: setting datasource
should be last line.
If you set datasource
first, SelectedIndexChanged
event will fire and you may get the cast error or other exception.
Upvotes: 41
Reputation: 21
I had the same trouble. In my case, SelectedIndexChanged event fires and just jumps out the method. Try do not use SelectedIndexChanged event. Or something like this:
ComboBox1.SelectedIndexChanged -= new System.EventHandler(ComboBox1_SelectedIndexChanged);
ComboBox1.DataSource = dataTable;
ComboBox1.ValueMember = "id";
ComboBox1.DisplayMember = "name";
ComboBox1.SelectedIndexChanged += new System.EventHandler(ComboBox1_SelectedIndexChanged);
It worked for me. =)
Upvotes: 2
Reputation: 11
public class ComboDeger {
private string yazi;
private int deger;
public ComboDeger(string stryazi, int strdeger) {
this.yazi = stryazi;
this.deger = strdeger;
}
public string yazisi {
get {
return yazi;
}
}
public int degeri {
get {
return deger;
}
}
}
private void combobox_doldur() {
ArrayList ComboDegerleri = new ArrayList();
ComboDegerleri.Add(new ComboDeger("9 : NORMAL", 9));
ComboDegerleri.Add(new ComboDeger("10 : ENGELLİ", 10));
comboBox1.DataSource = ComboDegerleri;
comboBox1.DisplayMember = "yazisi";
comboBox1.ValueMember = "degeri";
}
private void Form3_Load(object sender, EventArgs e) {
con.Open();
combobox_doldur();
// Populate the COMBOBOX using an array as DataSource.
}
Upvotes: 1
Reputation: 8337
ComboBox1.DataSource= dt; //the data table which contains data
ComboBox1.ValueMember = "id"; // column name which you want in SelectedValue
ComboBox1.DisplayMember = "name"; // column name that you need to display as text
Upvotes: 3
Reputation: 17691
you could specify like this
ComboBox1.ValueMember = "id";
ComboBox1.DisplayMember = "name";
Upvotes: 0
Reputation: 50215
They take strings...
ComboBox1.ValueMember = "id";
ComboBox1.DisplayMember = "name";
Upvotes: 2