检索comboBox显示的值

时间:2011-09-27 12:07:51

标签: c# winforms combobox

我正在尝试检索comboBox中显示的所有项目的显示值。

第一种情况:如果使用DataSource填充了comboBox:

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")填充了comboBox,我使用相同的代码,但我必须查看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 个答案:

答案 0 :(得分:4)

您可以尝试这样的事情:

        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();
            }
        }

答案 1 :(得分:2)

在第一种情况下,Combobox将填充DataSource属性。因此,DataSource不会为空。在第二种情况下,它将为null。因此,您可以使用(comboBox1.DataSource==null)执行if-else,然后相应地使用ItemArray[0]ItemArray[1]

答案 2 :(得分:1)

Leito,您可以检查数据源是否是DataTable,以确定要采取的操作。

if (comboBox.DataSource is DataTable)
{
    // do something with ItemArray[1]
}
else
{
    // do something with ItemArray[0]
}