如何设置默认combobox

所以我一直在寻找为我的combobox设置一个默认值。 我发现了一些东西,但它们似乎都没有用。

实际上,它是有效的,如果我创建一个简单的combobox并使用comboBox1.SelectedIndex = comboBox1.Items.IndexOf("something")但一旦我动态生成combobox的内容,我不能让它工作了。

这是我填充我的combobox(位于类的构造函数中);

  string command = "SELECT category_id, name FROM CATEGORY ORDER BY name"; List list = database.Select(command, false); cbxCategory.Items.Clear(); foreach (string[] result in list) { cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0])); } 

我似乎无法设置默认值,如果我将cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")放在上面的代码下面,它将无法正常工作。

顺便说一句,WinForms。

先感谢您。

cbxCategory.SelectedIndex应设置为0Items.Count-1类的整数

 cbxCategory.SelectedIndex = 2; 

您的

  cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New") 

只要没有ComboboxItem变换字符串(“New”),就应该返回-1;

另一个解决方案虽然我不喜欢它会有多少

 foreach(object obj in cbxCategory.Items){ String[2] objArray = (String[])obj ; if(objArray[1] == "New"){ cbxCategory.SelectedItem = obj; break; } } 

也许这也需要对您的代码进行以下转换

  foreach (string[] result in list) { cbxCategory.Items.Add(result); } 

我没有测试代码,我不确定转换为String [2],但类似的东西应该工作

看起来您正在搜索cbxCategory.Items集合中的字符串,但它包含ComboBoxItem类型的项目。 因此搜索将返回-1。

您可以使用LINQ。

 //string command = "SELECT category_id, name FROM CATEGORY ORDER BY name"; //List list = database.Select(command, false); // sample data... List list = new List { new string[] { "aaa", "bbb" }, new string[] { "ccc", "ddd" } }; cbxCategory.Items.Clear(); foreach (string[] result in list) { cbxCategory.Items.Add(new ComboBoxItem(result[1], result[0])); } ComboBoxItem tmp = cbxCategory.Items.OfType().Where(x => x.ResultFirst == "bbb").FirstOrDefault(); if (tmp != null) cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf(tmp); 

ComboBoxItem类:

 class ComboBoxItem { public string ResultFirst { get; set; } public string ResultSecond { get; set; } public ComboBoxItem(string first, string second) { ResultFirst = first; ResultSecond = second; } } 

这是我的简单解决方案

  var list = comboBox1.Items.Cast().ToList(); cbxCategory.SelectedIndex = list.FindIndex(c => c.StartsWith("test")); 

我的解决方案

 int? defaultID = null; foreach (DataRow dr in dataSource.Tables["DataTableName"].Rows) { if ((dr["Name"] != DBNull.Value) && ((string)dr["Name"] == "Default Name")) { defaultID = (int)dr["ID"]; } } if (defaultID != null) comboBox.SelectedValue = defaultID;