我有一个像这样的对象数组
var items = new object[]
{
new {name= "house",code=1,price= 30},
new {name= "water",code=2,price= 323},
new {name= "food",code=3,price= 45}
};
我想通过一个方法将每个值添加到数据表行(所以1个对象 - 1行),该方法的参数是一个对象数组。
我尝试像下面的代码那样做,但它只是将我的items数组中的每个对象添加到excel文件中的表格单元格中(我已经将标题添加到我的数据表中)
public void Create(object[] items)
{
// table headers are created before this line.......
var table = new DataTable();
table.Rows.Add(items);
}
所以我需要做的是,比如如何遍历我的数组并将其每个值分配给一行。 我文件中的预期结果:
Name Code Price
===================
house 1 30
water 2 323
food 3 45
谢谢(如果我的问题不够明确,请发表评论)
答案 0 :(得分:2)
你应该做
public void Create<T>(T[] items)
{
var table = new DataTable();
var props = typeof(T).GetProperties();
// Dynamically create headers
foreach(var p in props)
{
if(!table.Columns.Contains(p.Name))
table.Columns.Add(p.Name, p.ReturnType);
}
// Dynamically add values
foreach(var o in items)
{
var row = table.NewRow();
foreach(var p in props)
{
row[p.Name] = p.GetValue(o);
}
table.Rows.Add(row);
}
}
编写一个完全可重用的方法。
修改强> 改进了列的动态创建
答案 1 :(得分:1)
你可以使用反射:
var table = new DataTable();
table.Columns.Add("name", typeof(string));
table.Columns.Add("code", typeof(int));
table.Columns.Add("price", typeof(double));
foreach(var obj in items) {
var row = table.NewRow();
row["name"] = obj.GetType().GetProperty("name").GetValue(obj, null);
row["code"] = obj.GetType().GetProperty("code").GetValue(obj, null);
row["price"] = obj.GetType().GetProperty("price").GetValue(obj, null);
table.Rows.Add(row);
}
答案 2 :(得分:0)
您需要先添加列。
var table = new DataTable();
table.Columns.Add("name");
table.Columns.Add("code");
table.Columns.Add("price");
foreach (var item in items)
{
table.Rows.Add(item);
}