我想使用反射填充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;
}
}
正如您所看到的那样,我实际上是在使用关联对象属性类型的属性值填充行。
答案 0 :(得分:1)
你大部分都在那里,你应该能够做到这一点:
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);
}