所以我一直在寻找为我的组合框设置一个默认值。我找到了一些东西,但似乎都没有。
实际上,如果我创建一个简单的组合框并使用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。
提前谢谢。
答案 0 :(得分:24)
cbxCategory.SelectedIndex
应设置为0
到Items.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;