Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用反射填充数据表_C#_.net_Reflection_Interface_Datatable - Fatal编程技术网

C# 用反射填充数据表

C# 用反射填充数据表,c#,.net,reflection,interface,datatable,C#,.net,Reflection,Interface,Datatable,我想使用反射填充DataTable,而不知道编译时的列类型。我将有一个实现接口的对象,比如说IData 我希望DataTable列模式反映对象字段,DataTable的行来自IData对象列表 到目前为止我已经 var listOfData = GetIDataListImplementation(); var dataTable = new System.Data.DataTable(); var first = listOfData.FirstOrDefault();

我想使用反射填充DataTable,而不知道编译时的列类型。我将有一个实现接口的对象,比如说
IData

我希望DataTable列模式反映对象字段,DataTable的行来自IData对象列表

到目前为止我已经

var listOfData = GetIDataListImplementation();

    var dataTable = new System.Data.DataTable();

    var first = listOfData.FirstOrDefault();

    var type = typeof(fist);
    var props = mainType.GetProperties();

    // Create Table
    foreach (var prop in props)
    {
        dataTable.Columns.Add(new System.Data.DataColumn(prop.Name, prop.PropertyType));
    }

    // Populate Table
    foreach (var dataItem in listOfData)
    {
// STUCK HERE NOT SURE WHAT TO DO
        System.Data.DataRow row = dataTable.NewRow();
        for (int i = 0; i < mainProps.Length; i++)
        {
// HOW DO I GET THE OBJECT PROPERTY VALUE ASSOCIATED WITH THIS TABLE COLUMN?
            row[mainProps[i].Name] = dataItem;
        }
    }
var listOfData=GetIDataListImplementation();
var dataTable=new System.Data.dataTable();
var first=listOfData.FirstOrDefault();
变量类型=类型(fist);
var props=mainType.GetProperties();
//创建表
foreach(道具中的var道具)
{
dataTable.Columns.Add(新的System.Data.DataColumn(prop.Name,prop.PropertyType));
}
//填充表
foreach(listOfData中的var数据项)
{
//困在这里不知道该怎么办
System.Data.DataRow行=dataTable.NewRow();
对于(int i=0;i

正如您所看到的那样,我陷入了用关联对象属性类型的属性值填充行的困境。

您基本上已经做到了,您应该能够做到这一点:

foreach (var dataItem in listOfData)
{
    DataRow row = dataTable.NewRow();

    for (int i = 0; i < props.Length; i++)
    {
       row[i] = props[i].GetValue(dataItem);
    }

    dataTable.Rows.Add(row);
}
foreach(listOfData中的var dataItem)
{
DataRow行=dataTable.NewRow();
for(int i=0;i
“不知道编译时的行值是什么”不是几乎总是这样吗?你想达到什么目的?你从什么来源填充数据表?哦,我的意思是列类型。我试图填充一个数据表,而不知道编译时列是什么。基本上,为实现某个接口的任何对象创建一个模式并填充它