Ответ 1
Попробуйте это.
cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);
Надеюсь, что это поможет.:)
Я использую combobox в форме С# windows. Я связал список элементов, как показано ниже:
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;
Но combobox не выбран со значением. Как я могу это сделать?
Попробуйте это.
cmbEmployeeStatus.SelectedIndex = cmbEmployeeStatus.FindString(employee.employmentstatus);
Надеюсь, что это поможет.:)
Чтобы создать стиль базы данных ComboBox вручную, чтобы установить связь между числом (внутренним) и некоторым текстом (видимым), я обнаружил, что вам нужно:
Прежде всего. Измените свой KeyValuePair так, чтобы он выглядел так:
(0, "Выбор" ) (1, "Вариант 1" )
Теперь, когда вы запустите свой sql "Выберите empstatus от сотрудников, где blah" и верните целое число, вам нужно установить combobox, не тратя пустую трату времени.
Просто: *** SelectedVALUE - не элемент ****
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, которая дает мне ручное управление привязкой данных и снижает ошибки кода.
Почему я так долго ответил на это? Я тоже боролся с этим, потому что, как кажется, в Интернете нет хорошей информации о том, как это сделать. Я понял это и подумал, что мне будет хорошо, и отправьте его кому-то еще.
В приложении Windows мы используем это как
DDLChangeImpact.SelectedIndex = DDLChangeImpact.FindStringExact(ds.Tables[0].Rows[0]["tmchgimp"].ToString());
DDLRequestType.SelectedIndex = DDLRequestType.FindStringExact(ds.Tables[0].Rows[0]["rmtype"].ToString());
Ниже будет работать в вашем случае.
cmbEmployeeStatus.SelectedItem =employee.employmentstatus;
Когда вы устанавливаете свойство SelectedItem для объекта, ComboBox пытается сделать этот объект выбранным в данный момент в списке. Если объект найден в списке, он отображается в части редактирования ComboBox, а свойство SelectedIndex устанавливается в соответствующий индекс. Если объект не существует в списке, свойство SelectedIndex остается на текущем значении.
ИЗМЕНИТЬ
Я думаю, что установка выбранного элемента, как показано ниже, неверна в вашем случае.
cmbEmployeeStatus.SelectedItem =**employee.employmentstatus**;
Как ниже
var toBeSet = new KeyValuePair<string, string>("1", "Contract");
cmbEmployeeStatus.SelectedItem = toBeSet;
Вы должны назначить правильную пару значений имени.
Используйте свойство SelectedIndex для соответствующего статуса сотрудника в поле со списком.
cmbEmployeeStatus.Text = "text"
Я подозреваю, что что-то не так, когда вы спасаете db. Я понимаю ваши шаги как:
получил больше кода, особенно при сохранении? где в вашем коде инициализируются и заполняются список привязок
попробуйте это
combobox.SelectedIndex = BindingSource.Item(9) where "9 = colum name 9 from table"
Чтобы установить значение в ComboBox
cmbEmployeeStatus.Text="Something";
Возможное решение:
cmbEmployeeStatus.SelectedValue = cmbEmployeeStatus.Items.FindByText("text").Value;
Попробуйте следующее:
KeyValuePair<string, string> pair = (KeyValuePair<string,string>)this.ComboBox.SelectedItem;