【问题标题】:c# how to gettype from any Datatablec#如何从任何数据表中获取类型
【发布时间】:2014-02-25 13:22:13
【问题描述】:

我已经用谷歌搜索来解决这个问题,但我没有成功。我从这样的任何来源获取数据表:

  姓名    姓氏

  亚历克斯       德索萨

  金         钩子

这是一个非常简单的数据表。我想从数据表中获取类型作为反射。

    DataTable dt=from any source; 
    Type type=dt.GetType();
PropertyInfo[] properties=type.GetProperties(); 

foreach(var p in properties) 
{
Console.WriteLine(p.Name)
}

输出必须是 Name , Surnama 。怎么做 。谢谢
注意:我想使用反射。是否有数据表列名称到类属性(姓名,姓氏)的对话。

【问题讨论】:

  • 我想用 .数据表中每个项目的 Property.GetValue(...)。
  • 这里你可能需要一个类对象,其属性NameSurname 具有有效的dataType,然后你可以转换DataRow 值并能够使用Convert.ChangeType 设置类属性。
  • 我的数据表是可变列。列会一天天增长。
  • 这里没有理由使用反射。这只是废话

标签: c# reflection datatable


【解决方案1】:

如果您想要的是列名,那么您将遍历 DataTable 的 Columns 集合并获取每个列的 ColumnName。

foreach (DataColumn column in myDataTable.Columns)
{
    foreach (DataRow row in myDataTable.Rows)
    {
        var valueByColumn = row[column];
        var valueByColumnName = row[column.ColumnName];

        // ...
    }
}

【讨论】:

  • 我尝试使用列名来识别单元格值,例如.Property.GetValue(foreach row)
  • 你似乎试图让这件事变得更难。这不是使用反射的地方。您可以使用数据绑定中使用的 PropertyDescriptors,但这不是反射,我不明白您为什么要这样做。请参阅我添加到答案中的代码示例,其中显示了如何按列或列名获取字段值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 2021-06-07
  • 2019-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多