【问题标题】:How to get row & cell in object如何获取对象中的行和单元格
【发布时间】:2019-05-21 03:45:06
【问题描述】:

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

有没有办法使用数据源或对象中的数据?

【问题讨论】:

    标签: c# winforms object combobox


    【解决方案1】:

    您不必使用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 转换为原始类型。

    【讨论】:

      【解决方案2】:

      如果你有对象数据,你可以使用:

          if (comboBox1.SelectedValue != null)
              {
                  TestObject current = (TestObject)comboBox1.SelectedValue;
                  MessageBox.Show(current.Value.ToString());
              }
      

      【讨论】:

      • 我不能使用 SelectedValue,因为组合框来自另一个表单,我想在其中获取数据并循环并从中获取单元格
      猜你喜欢
      • 2013-02-06
      • 1970-01-01
      • 2021-06-21
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2013-07-21
      • 1970-01-01
      相关资源
      最近更新 更多