列表到数据表并添加列

本文关键字:添加 数据表 列表 | 更新日期: 2024-11-03 18:35:38

我有通用列表...我正在尝试将其转换为数据表。

我正在使用下面的代码。

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

只需将以下内容添加到您的类定义中:

   public string StatusText
   {
    get
    {
       if(status == 0)
          return "Active";
       else
          return "InActive";
     }
   }