我有combobox.DataSource
中的对象,如果可以,我需要在对象或数据源中使用DisplayMember
和ValueMember
。我也想遍历这些数据,但我不知道怎么做,因为无法从中获取细胞。
有什么方法可以在数据源或对象中使用数据?
答案 0 :(得分:0)
如果有对象数据,则可以使用:
if (comboBox1.SelectedValue != null)
{
TestObject current = (TestObject)comboBox1.SelectedValue;
MessageBox.Show(current.Value.ToString());
}
答案 1 :(得分:0)
您不必使用object
就可以将其抛弃。
假设您是为CmbUnitName.DataSource
分配值的人,并且您应该知道此对象的类型。在这种情况下,您可以轻松地将其投射回collection / datatable并循环遍历。
例如,如果它包含类Unit
的对象的列表:
//cast it back
var cmbUnits = (List<Unit>) CmbUnitName.DataSource;
//loop through collection
foreach(var unit in cmbUnits)
{
//access fields/properties
Console.WriteLine(unit.Id+" "+unit.UnitName);
}
转换后的零件(遍历元素和属性)将在很大程度上取决于数据源的性质。无论如何,只要知道了类型,就应该能够弄清楚如何遍历它。
如果您不知道原始对象的类型,并且由于某种原因无法从代码中找到它,则可以通过调用CmbUnitName.DataSource.GetType
来确定它。
请注意,ComboBox.DataSource
不包含任意对象。该属性值必须为:
实现IList接口或Array的对象。
因此,大多数情况下,您应该可以将其投射回IList
。如果您要创建某种通用的实现,该通用实现可用于 any 数据绑定组合框,则可以尝试一下。但是我有一种强烈的感觉,在您的情况下,您只需要将DataSource
转换为原始类型即可。