Как установить значение по умолчанию - программирование
Подтвердить что ты не робот

Как установить значение по умолчанию

Итак, я искал, чтобы установить значение по умолчанию для моего списка. Я нашел несколько вещей, но никто из них, похоже, не работает.

На самом деле, он работает, если я создаю простое поле со списком и использую 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, кстати.

Спасибо заранее.

4b9b3361

Ответ 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;