Как установить выбранный элемент ComboBox в C# Windows Forms?
Я пытаюсь установить выбранный элемент comboBox
при щелчке события DataGrid, но я не мог. Я гуглил и пробовал разные способы, но безуспешно.
для меня SelectedIndex
работает, но я не смог найти индекс элементов в ComboBox, поэтому я не мог выбрать элемент.
не работает код:
for (int i = 0; i < cmbVendor.Items.Count; i++)
if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")))
{
cmbVendor.SelectedIndex = i;
break;
}
8 ответов
вы можете получить индекс элемента по .Items.IndexOf()
метод. Попробуйте это:
comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));
вам не нужно перебирать.
вы можете найти дополнительную информацию в вопросе переполнения стека Как установить выбранный элемент в поле со списком в соответствии с моей строкой с помощью C#?.
следующее работает для меня отлично. Передать любое значение или текст, который доступен в ComboBox.
comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
наконец-то я это понял. Это:
cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
свойство SelectedText предназначено для выбранной части редактируемого текста в части текстового поля поля со списком.
предполагая, что gridView1.GetFocusedRowCellValue("vVendor")
действительно работает, как ожидалось, следующий код должен исправить проблему.
string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
foreach ( var item in cmbVendor.Items )
{
if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0)
{
cmbVendor.SelectedItem = item;
break;
}
}
исходный код имел несколько вызовов gridView1.GetFocusedRowCellValue("vVendor")
, тогда как вам нужен только один.
предложенных "поле combobox1.Предметы.IndexOf ("предполагает слишком много о содержании cmbVendor.Items
.
у меня была аналогичная проблема, и я частично решил ее с помощью других ответов здесь. Во-первых, моя конкретная проблема заключалась в том, что
combobox1.SelectedItem = myItem;
не работает, как ожидалось. Основной причиной было то, что myItem был объектом из группы, которая фактически была тем же списком, что и элементы в combobox, но на самом деле это была копия этих элементов. Таким образом, myItem был идентичен допустимой записи, но сам по себе не был допустимым объектом из контейнера combobox1.
В решением было использовать SelectedIndex вместо SelectedItem, например:
combobox1.SelectedIndex = get_combobox_index(myItem);
здесь
private int get_combobox_index(ItemClass myItem)
{
int i = 0;
var lst = combobox1.Items.Cast<ItemClass >();
foreach (var s in lst)
{
if (s.Id == myItem.Id)
return i;
i++;
}
return 0;
}
Если вы установили свойство ValueMember для элемента управления ComboBox, вы можете просто assingn значение SelectedValue свойство в элементе управления ComboBox. Вам не нужно искать индекс явно. Вот пример:
public class Vendor{
public int VendorId {get; set;}
public string VendorName {get; set;}
}
// Inside your function
var comboboxData = new List<Vendor>(){
new Vendor(){ vendorId = 1, vendorName = "Vendor1" },
new Vendor(){ vendorId = 2, vendorName = "Vendor2" }
}
cmbVendor.DataSource = comboboxData;
cmbVendor.DisplayMember = "VendorName";
cmbVendor.ValueMember = "ValueId";
// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do:
cmbVendor.SelectedValue = 2;
это работает для меня.....
string displayMember = ComboBox.DataSource.To<DataTable>().Select("valueMemberColumn = '" + value + "'")[0]["displayMember"].ToString();
ComboBox.FindItemExact(displayMember, true).Selected = true;