Как установить значение по умолчанию
Итак, я искал, чтобы установить значение по умолчанию для моего списка. Я нашел несколько вещей, но никто из них, похоже, не работает.
На самом деле, он работает, если я создаю простое поле со списком и использую 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, кстати.
Спасибо заранее.
Ответы
Ответ 1
cbxCategory.SelectedIndex
должно быть установлено целое число от 0
до Items.Count-1
, например
cbxCategory.SelectedIndex = 2;
ваш
cbxCategory.SelectedIndex = cbxCategory.Items.IndexOf("New")
должен возвращать -1 до тех пор, пока ComboboxItem не обрезает строку ( "Создать" );
другое решение, хотя мне это не нравится, будет
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], но что-то подобное должно работать
Ответ 2
Похоже, вы ищете коллекцию cbxCategory.Items для строки, но она содержит элементы типа ComboBoxItem. Поэтому поиск вернет -1.
Ответ 3
Вы можете использовать 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;
}
}
Ответ 4
Здесь мое простое решение
var list = comboBox1.Items.Cast<string>().ToList();
cbxCategory.SelectedIndex = list.FindIndex(c => c.StartsWith("test"));
Ответ 5
Мое решение:
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;