检索显示在comboBox中的值

4

我想要获取所有在 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已经用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]。这是可能的吗?我该怎么做?


我认为你需要使用 comboBox1.SelectedText 或者 comboBox1.SelectedValue - V4Vendetta
1
@V4Vendetta:我不是在尝试获取所选择的项目,而是要循环遍历所有项目。 - Otiel
3个回答

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

我没有使用 var 关键字的本能。谢谢 :) - Otiel

2
Combobox 将在第一种情况下使用 DataSource 属性进行填充。因此,它的 DataSource 不会为空。在第二种情况下,它将为空。因此,您可以使用 (comboBox1.DataSource==null) 进行 if-else 判断,然后相应地使用 ItemArray[0]ItemArray[1]。请注意保留 html 标签。

1
Leito,你可以检查一下DataSource是否为DataTable来确定需要采取哪种操作。
if (comboBox.DataSource is DataTable)
{
    // do something with ItemArray[1]
}
else
{
    // do something with ItemArray[0]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接