Получить отображаемые значения comboBox - PullRequest
4 голосов
/ 27 сентября 2011

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

Первый случай : если поле со списком было заполнено с помощью DataSource:

comboBox.DataSource = myDataSet.Tables[0];
comboBox.DisplayMember = "value";
comboBox.ValueMember = "id";

... Я использую этот код:

foreach (DataRowView rowView in comboBox.Items) {
    String value = rowView.Row.ItemArray[1].ToString();
    // 1 corresponds to the displayed members
    // Do something with value
}

Второй случай : если поле со списком заполнено comboBox.Items.Add("blah blah"), я использую тот же кодЗа исключением того, что я должен смотреть в первом измерении ItemArray:

foreach (DataRowView rowView in comboBox.Items) {
    String value = rowView.Row.ItemArray[0].ToString();
    // 0 corresponds to the displayed members
    // Do something with value
}

Теперь я хотел бы иметь возможность получить все значения, не зная схемы, используемой для заполнения comboBox.Таким образом, я не знаю, должен ли я использовать ItemArray[0] или ItemArray[1].Является ли это возможным?Как я мог это сделать?

Ответы [ 3 ]

4 голосов
/ 27 сентября 2011

Вы можете попробовать что-то вроде этого:

        string displayedText;
        DataRowView drw = null;

        foreach (var item in comboBox1.Items)
        {
            drw = item as DataRowView;
            displayedText = null;

            if (drw != null)
            {
                displayedText = drw[comboBox1.DisplayMember].ToString();
            }
            else if (item is string)
            {
                displayedText = item.ToString();
            }
        }
2 голосов
/ 27 сентября 2011

Combobox будет заполняться свойством DataSource в первом случае.Поэтому его DataSource не будет нулевым.Во втором случае это будет ноль.Таким образом, вы можете сделать if-else с (comboBox1.DataSource==null) и затем соответственно использовать ItemArray[0] или ItemArray[1].

1 голос
/ 27 сентября 2011

Leito, вы можете проверить, является ли DataSource DataTable или нет, чтобы определить, какое действие предпринять.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...