Как установить выбранный элемент ComboBox в C # Windows Forms? - PullRequest
7 голосов
/ 22 февраля 2012

Я пытаюсь установить выбранный элемент 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;
    }

Ответы [ 9 ]

14 голосов
/ 22 февраля 2012

Вы можете получить свой индекс предмета методом .Items.IndexOf().Попробуйте это:

comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));

Вам не нужно повторять.

Дополнительную информацию можно найти в вопросе переполнения стека Как установить выбранный элемент вcomboBox, чтобы соответствовать моей строке, используя C #? .

11 голосов
/ 19 января 2013

Следующее работает для меня отлично.Передайте любое значение или текст, который доступен в выпадающем списке.

comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
4 голосов
/ 22 февраля 2012

У вас есть в вашем if:

cmbVendor.SelectedItem = cmbVendor.Items[i];
2 голосов
/ 23 февраля 2012

Наконец я это выяснил. Это:

cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));

Свойство SelectedText предназначено для выделенной части редактируемого текста в части текстового поля комбинированного окна.

1 голос
/ 22 февраля 2012

Предполагая, что 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.Items.IndexOf (» предполагает слишком много о содержимом cmbVendor.Items.

0 голосов
/ 01 января 2019
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String From DataGrid Cell value")

Попробуйте, это будет нормально работать в приложении C # для Windows

0 голосов
/ 21 ноября 2017

Если вы установили свойство ValueMember для элемента управления ComboBox, вы можете просто присвоить значение свойству 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;
0 голосов
/ 16 ноября 2017

это работает для меня .....

string displayMember = ComboBox.DataSource.To<DataTable>().Select("valueMemberColumn = '" + value + "'")[0]["displayMember"].ToString();
ComboBox.FindItemExact(displayMember, true).Selected = true;
0 голосов
/ 01 февраля 2017

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

combobox1.SelectedItem = myItem;

не работал должным образом. Основной причиной было то, что myItem был объектом из группы, которая фактически представляла собой тот же список, что и элементы в выпадающем списке, но на самом деле это была копия этих элементов. Таким образом, 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...