如何在对象中获取行和单元格

时间:2019-05-21 03:45:06

标签: c# winforms object combobox

我有combobox.DataSource中的对象,如果可以,我需要在对象或数据源中使用DisplayMemberValueMember。我也想遍历这些数据,但我不知道怎么做,因为无法从中获取细胞。

有什么方法可以在数据源或对象中使用数据?

This is object I want to use cells inside it

2 个答案:

答案 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转换为原始类型即可。