Как установить выбранное значение из Combobox? - PullRequest
37 голосов
/ 14 июля 2011

Я использую комбинированный список в форме окна C #. Я связал список предметов, как показано ниже:

var employmentStatus = new BindingList<KeyValuePair<string, string>>();

employmentStatus.Add(new KeyValuePair<string, string>("0", "[Select Status]"));
employmentStatus.Add(new KeyValuePair<string, string>("1", "Contract"));
employmentStatus.Add(new KeyValuePair<string, string>("2", "Part Time"));
employmentStatus.Add(new KeyValuePair<string, string>("3", "Permanent"));
employmentStatus.Add(new KeyValuePair<string, string>("4", "Probation"));

employmentStatus.Add(new KeyValuePair<string, string>("5", "Other"));
cmbEmployeeStatus.DataSource = employmentStatus;
cmbEmployeeStatus.ValueMember = "Key";
cmbEmployeeStatus.DisplayMember = "Value";
cmbEmployeeStatus.SelectedIndex = 0;

Я сохраняю выбранное значение в базе данных, например, 1 или 2. Теперь я хочу установить выбранное значение из элемента базы данных, например:

cmbEmployeeStatus.SelectedValue =employee.employmentstatus;     

Но выпадающий список не выбран со значением. Как я могу это сделать?

Ответы [ 11 ]

46 голосов
/ 14 июля 2011

Попробуйте это.

cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);

Надеюсь, это поможет.:)

15 голосов
/ 06 декабря 2012

Чтобы сделать стиль ComboBox для базы данных вручную, пытаясь установить связь между числом (внутренним) и некоторым текстом (видимым), я обнаружил, что вам необходимо:

  1. Храните ваши элементы в списке (вы близки - кроме строки, строки - нужно int, строка)
  2. Свойство DataSource к списку (Вы хороши)
  3. DataMember, DataValue (Вы хороши)
  4. Загрузить значение по умолчанию (Вы в порядке)
  5. Приведите ценность из базы данных (Ваш вопрос)
  6. Получить значение для возврата в базу данных (Ваш следующий вопрос)

Перво-наперво. Измените значение KeyValuePair на следующее:

(0, "Выбор") (1, «Вариант 1»)

Теперь, когда вы запускаете свой sql «Выбор empstatus среди сотрудников, где бла» и возвращаете целое число, вам нужно установить комбинированный список, не тратя много времени.

Просто: *** Выбрано ЗНАЧЕНИЕ - не элемент ****

cmbEmployeeStatus.SelectedValue = 3;   //or

cmbEmployeeStatus.SelectedValue = intResultFromQuery;   

Это будет работать независимо от того, загружали ли вы комбинированный список вручную со значениями кода, как вы это сделали, или если вы загружаете comboBox из запроса.

Если ваши внешние ключи являются целыми числами (что для того, что я делаю, они все), жизнь легка. После того, как пользователь внесет изменение в comboBox, значение, которое вы сохраните в базе данных, будет SelectedValue. (Примените к int при необходимости.)

Вот мой код для установки ComboBox на значение из базы данных:

if (t is DBInt) //Typical for ComboBox stuff
    {
    cb.SelectedValue = ((DBInt)t).value;
    }

И для извлечения:

((DBInt)t).value = (int) cb.SelectedValue;

DBInt - это оболочка для Integer, но это часть моего ORM, которая дает мне ручное управление привязкой данных и уменьшает количество ошибок кода.

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

4 голосов
/ 16 июля 2012

в окнах мы используем как это

 DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
 DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
3 голосов
/ 14 июля 2011

Ниже будет работать в вашем случае.

cmbEmployeeStatus.SelectedItem =employee.employmentstatus;

Когда вы устанавливаете свойство SelectedItem для объекта, ComboBox пытается сделать этот объект текущим выбранным в списке.Если объект найден в списке, он отображается в области редактирования ComboBox, и для свойства SelectedIndex устанавливается соответствующий индекс.Если объект не существует в списке, свойство SelectedIndex остается в его текущем значении.

РЕДАКТИРОВАТЬ

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

cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;

Как показано ниже

var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;

Вы должны назначить правильную пару имя-значение.

2 голосов
/ 14 июля 2011

Используйте свойство SelectedIndex для соответствующего статуса сотрудника в поле со списком.

2 голосов
/ 14 июля 2011
cmbEmployeeStatus.Text = "text"
1 голос
/ 01 июля 2015

попробуйте

combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
1 голос
/ 14 июля 2011

Я подозреваю, что что-то не так, когда вы сохраняете в БД. Я понимаю ваши шаги как:

  1. заполнить и связать
  2. пользователь выбирает и пункт, нажимай и сохраняй .. потом сохраняешь в db
  3. теперь, если вы выберете другой предмет, он не выберет?

получил больше кода, особенно при сохранении? где в вашем коде инициализируется и заполняется список привязок

0 голосов
/ 03 сентября 2013

Попробуйте это:

KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;
0 голосов
/ 04 августа 2013

Возможное решение:

cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...