如何设置默认组合框

时间:2013-01-29 18:44:06

标签: c# winforms combobox populate

所以我一直在寻找为我的组合框设置一个默认值。我找到了一些东西,但似乎都没有。

实际上,如果我创建一个简单的组合框并使用comboBox1.SelectedIndex = comboBox1.Items.IndexOf("something"),它会起作用,但是一旦我动态生成组合框的内容,我就无法再让它工作了。

这是我填充我的组合框(位于类的构造函数中)的方式;

        string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
        List<string[]> 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。

提前谢谢。

5 个答案:

答案 0 :(得分:24)

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]的强制转换,但类似的东西应该可以运行

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可以使用LINQ。

//string command = "SELECT category_id, name FROM CATEGORY ORDER BY name";
//List<string[]> list = database.Select(command, false);
// sample data...
List<string[]> list = new List<string[]> { 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<ComboBoxItem>().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;
    }
}

答案 3 :(得分:0)

这是我的简单解决方案

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

答案 4 :(得分:0)

我的解决方案:

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;