我有4个列表'列表'不同种类的数据(文本)和每个列表中的项目数也不相同。从这些列表创建数据表的最佳方法是什么?
实施例
code
所以从上面4列出了创建数据表的最佳方法? 注意:每个列表中的项目数可能会有所不同..
答案 0 :(得分:0)
我使用反射定义列名,然后迭代列表中的记录以填充行。像这样:
public DataTable GetDataTable<T>(List<T> list) where T : class
{
DataTable table = new DataTable();
var fields = typeof(T).GetFields();
//Create Columns
foreach(var field in fields)
{
DataColumn c = new DataColumn(field.Name, field.GetType());
c.AllowDbNull = true;
table.Columns.Add(c);
}
//Create rows
foreach(T record in list)
{
DataRow row = table.NewRow();
foreach(var field in fields)
{
//If it's null the cell will contain DbNull.Value
if(field.GetValue(record) != null)
row[field.Name] = field.GetValue(record);
}
table.Rows.Add(row);
}
return table;
}
这将为您提供一个数据表,其中columnNames为类的属性名,行为列中每个记录的值。如果您的某个属性为null,则数据表将包含DbNull.Value
。
答案 1 :(得分:0)
@Alexander我设法使用以下代码填充所需的表:
public static DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)`enter code here`;
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
return dataTable;
}