我正在尝试检索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]
。可能吗?我怎么能这样做?
答案 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]
}