检索组合框显示的值

本文关键字:显示 组合 检索 | 更新日期: 2023-09-27 18:10:01

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

第一个大小写:如果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
}

现在我希望能够检索所有值,而不知道用于填充组合框的方案。因此,我不知道我是否必须使用ItemArray[0]ItemArray[1]。这可能吗?我怎么能这么做呢?

检索组合框显示的值

您可以尝试这样做:

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

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

Leito,您可以检查DataSource是否是DataTable,以确定采取哪种操作。

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