【发布时间】:2019-05-21 03:45:06
【问题描述】:
我有来自combobox.DataSource 的对象,如果可以的话,我需要在对象或数据源中使用DisplayMember 和ValueMember。我也想遍历这些数据,但我不知道怎么做,因为无法从中获取单元格。
有没有办法使用数据源或对象中的数据?
【问题讨论】:
标签: c# winforms object combobox
我有来自combobox.DataSource 的对象,如果可以的话,我需要在对象或数据源中使用DisplayMember 和ValueMember。我也想遍历这些数据,但我不知道怎么做,因为无法从中获取单元格。
有没有办法使用数据源或对象中的数据?
【问题讨论】:
标签: c# winforms object combobox
您不必使用object,只需将其转换回即可。
假设你是给CmbUnitName.DataSource赋值的人,你应该知道这个对象的类型。在这种情况下,您可以轻松地将其转换回集合/数据表并循环遍历它。
例如,如果它包含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 接口或数组的对象。
所以,大多数时候您应该能够将其转换回IList。如果您想创建某种适用于 any 数据绑定组合框的通用实现,您可以试试这个。但我有一种强烈的感觉,在你的情况下,你只需要将 DataSource 转换为原始类型。
【讨论】:
如果你有对象数据,你可以使用:
if (comboBox1.SelectedValue != null)
{
TestObject current = (TestObject)comboBox1.SelectedValue;
MessageBox.Show(current.Value.ToString());
}
【讨论】: