是否可以使用foreach
循环遍历组合框中的每个项目?我该怎么做?
事情是我有一个System.Data.DataRowView
,因为组合框附加到DataTable
。如何将其转换为string
?
答案 0 :(得分:16)
通常,它看起来像这样:
foreach(object item in myComboBox.Items)
{
DataRowView row = item as DataRowView;
if(row != null)
{
string displayValue = row["myColumnName"].ToString();
// do something
}
else
// error: item was not of type DataRowView
}
另见http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.items.aspx
答案 1 :(得分:3)
foreach (var item in combobox1.Items)
{
//do stuff
}
如果您知道内容是字符串,则可以
foreach (object item in combobox1.Items)
{
string text = (item as string);
//do stuff with the text
}
如果您使用的是.net 3.5或更高版本,则可以使用Cast<T>()
IEnumerable<T>
的{{1}}扩展方法缩短它(由ObjectCollection
实现,ComboBox.Items
的类型{1}}):
foreach (string text in combobox1.Items.Cast<string>())
{
//do stuff with the text
}
答案 2 :(得分:2)
根据您的previous question,您可能想要遍历各个项目以查找匹配的文本值。相反,您可以使用ComboBox.FindStringExact方法进行不区分大小写的搜索,该搜索将返回找到的第一个匹配项的索引,如果找不到相关文本,则返回-1:
comboBox1.SelectedIndex = comboBox1.FindStringExact("4");
答案 3 :(得分:1)
是的,它只是一个标准的集合。例如:
foreach(object item in myComboBox.Items)
“object”可能(但不一定)是一个字符串。如果您知道它总是一个字符串,您可以将其更改为:
foreach(string item in myComboBox.Items)
答案 4 :(得分:0)
是 - 遍历控件的项集合:
foreach(var item in this.myCombobox.Items)
{
//your code
}
答案 5 :(得分:0)
foreach(ListItem item in this.myCombobox.Items)
{
//...
}
答案 6 :(得分:0)
foreach( object item in ComboBoxName.Items )
{
<dosomething>
}
我还能说什么?这将按顺序访问它们,但所有都将是对象。由您决定项目的类型。
答案 7 :(得分:0)
我在这个问题上苦苦挣扎多年,因为我经常使用ComboBox控件,绑定到各种不同类的List&lt;&gt;。
我真的不想在我的函数中硬编码字段名,或者对每种类型的List&lt;&gt;都有单独的SelectItemByValue函数。我正在使用的课程。
我最终想出了以下可重用的解决方案。
List<EmployeeRecord> m_listOfEmployees = GetListOfEmployees();
...
comboBoxEmployees.DataSource = m_listOfEmployees;
comboBoxEmployees.DisplayMember = "EmployeeName";
comboBoxEmployees.ValueMember = "EmployeeID";
选择具有特定员工ID的ComboBox项目:
int someEmployeeID = 4;
ComboBoxHelper.SetComboBoxSelectionByValue<EmployeeRecord>(comboBoxEmployees, someEmployeeID);
这是完成工作的功能。
支撑自己,它不漂亮。
public static void SetComboBoxSelectionByValue<T>(ComboBox ctrl, int? value)
{
// If the ComboBox has no items, disable it (so the user can immediately see there's nothing selectable)
ctrl.Enabled = (ctrl.Items.Count > 0);
int inx = 0;
foreach (T t in ctrl.Items)
{
foreach (PropertyInfo info in typeof(T).GetProperties())
{
if (info.Name == ctrl.ValueMember)
{
object val = info.GetValue(t, null);
if (val.ToString() == value.Value.ToString())
{
ctrl.SelectedIndex = inx;
return;
}
}
}
inx++;
}
if (ctrl.Items.Count > 0)
ctrl.SelectedIndex = 0;
}
注意你必须如何调用该函数,并向其传递存储在每个ComboBoxItem中的类型对象(在此示例中为 EmployeeRecord ),以及指向ComboBox的指针和要设置为SelectedItem的项的值。
ComboBoxHelper.SetComboBoxSelectionByValue<EmployeeRecord>(comboBoxEmployees, someEmployeeID);
该函数逐步执行ComboBox中的Items,在该项的记录中查找“ValueMember”字段(在此示例中为EmployeeID),并将ValueMember的值与所需的值参数进行比较。
我知道,我知道,它并不漂亮,但是当你将List绑定到ComboBox时,你就无法使用DataRowView:
DataRowView row = item as DataRowView;
string displayValue = row["someColumnName"].ToString();
如果你想要一个通用的SetComboBoxSelectionByValue函数,它可以使用任何类型的列表,那么你需要开始进入PropertyInfos,找到特定类中字段的值。