List to Datatable并添加列
我有通用列表...我试图将其转换为数据表。List to Datatable并添加列
我使用下面的代码..
private DataTable ToDataTable<T>(List<T> items)
{
var tb = new DataTable(typeof(T).Name);
PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in props)
{
Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);
}
foreach (T item in items)
{
var values = new object[props.Length];
for (int i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(item, null);
}
tb.Rows.Add(values);
}
return tb;
}
我需要在数据表中添加另一列说StatusText
。
该数据表中已有一列名为Status
。
如果此栏为0,则StatusText
应该是Active
,或者如果它是1,那么StatusText
将Inactive
像下面表目前我的代码返回...
Id Name Status
------------------
1 Test 1
2 Test1 0
3 Test2 0
但是,如何能我生成如下表格?
Id Name Status StatusText
------------------------------
1 Test 1 InActive
2 Test1 0 Active
3 Test2 0 Active
试试这个
DataTable dt = ToDataTable(your list); // Get DataTable From List
dt.Columns.Add(new Column("StatusText", typeof(string))); // Add New Column StatusText
//Iterate All Rows
foreach(DataRow row in dt.Rows)
{
//Check Status value, and set StatusText accordingly.
row["StatusText"] = int.Parse(row["Status"])==1 ? "InActive" : "Active";
}
这种方式对于不需要statustext的其他类生成数据表是无用的。 – AmazingDreams 2012-08-08 12:18:48
@AmazingDreams是的,它是真的,但有些时候,我们无法控制即将到来的数据。在这种情况下,这将有所帮助,否则,最好在班级中添加其他属性。 – 2012-08-08 12:20:53
这是一个很好的动态函数,可以将每个类放入数据表中。简单地将属性添加到需要它的类将保持这种状态。我认为你的回答增加了许多不必要的代码,忽略了你可以用属性做的很多事情。 – AmazingDreams 2012-08-08 12:25:52
就在你的类defenition补充一点:
public string StatusText
{
get
{
if(status == 0)
return "Active";
else
return "InActive";
}
}
肯定不是你传递给函数每个类型T将有额外的列?为什么不简单地将属性添加到需要它的那些类型,并且将会像其他类型一样被拾取。 – 2012-08-08 11:46:48