用反射填充DataTable



我想使用反射来填充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;
        }
    }

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

你大部分时间都在那里,你应该能够做到这一点:

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);
}

相关内容

  • 没有找到相关文章