C# 将list<>泛型集合 转化为 DataTable

使用案例:将页面easy ui 中datagrid表格中的数据,存成json字符串,

     通过ajax和ashx传入C#将string类型的json字符串解析成list<>泛型集合,

     由于业务需要,将本地sql不同表的数据和页面html的数据(通过webservice传入),放在一起处理数据。

转化方法

public class ListToDatatable
    {
        public ListToDatatable() { }
        public static DataTable ListToDataTable<T>(List<T> entitys)
        {

            //检查实体集合不能为空
            if (entitys == null || entitys.Count < 1)
            {
                return new DataTable();
            }

            //取出第一个实体的所有Propertie
            Type entityType = entitys[0].GetType();
            PropertyInfo[] entityProperties = entityType.GetProperties();

            //生成DataTable的structure
            //生产代码中,应将生成的DataTable结构Cache起来,此处略
            DataTable dt = new DataTable("dt");
            for (int i = 0; i < entityProperties.Length; i++)
            {
                //dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
                dt.Columns.Add(entityProperties[i].Name);
            }

            //将所有entity添加到DataTable中
            foreach (object entity in entitys)
            {
                //检查所有的的实体都为同一类型
                if (entity.GetType() != entityType)
                {
                    throw new Exception("要转换的集合元素类型不一致");
                }
                object[] entityValues = new object[entityProperties.Length];
                for (int i = 0; i < entityProperties.Length; i++)
                {
                    entityValues[i] = entityProperties[i].GetValue(entity, null);

                }
                dt.Rows.Add(entityValues);
            }
            return dt;
        }
    }

 

1、页面代码

  var rows = $('#tb_Master').datagrid('getRows');
        this.dataArray = new Array();
        for (this.i = 0; i < rows.length; i++) {
            this.model = {
                PT_PCURR: rows[i].PT_PCURR,
                MATNR: rows[i].MATNR
            }
            dataArray.push(model);
        }
        var json = $.toJSON(dataArray);

会得到如下一个json字符串 [{"PT_PCURR":"1.00","MATNR":"8"},{"PT_PCURR":"0.80","MATNR":"8"},{"PT_PCURR":"-0.20","MATNR":"8"}]

2、将string转化为list<>泛型集合

     List<DDMX> listMX = null;
      if (!string.IsNullOrEmpty(param[1]))
      {
         listMX = Tools.JSONTools.JSONStringToList<DDMX>(param[1]); 
      }

   [Serializable]
  //这个实体类,自由创建,根据你前台页面传入的实体类形式
    class DDMX
    {
        private string _matnr;
        private decimal _pt_pcurr;
        public decimal PT_PCURR
        {
            set { _pt_pcurr = value; }
            get { return _pt_pcurr; }
        }
        public string MATNR
        {
            set { _matnr = value; }
            get { return _matnr; }
        }
    }

 有需要 JSONStringToList 方法的朋友可以给我留言,也可自己网上搜搜


3、将list<>集合转化为 DataTable

DataTable dt = new DataTable();
dt = ListToDatatable.ListToDataTable(listMX);

 

posted @ 2014-09-26 09:16  CTRA王大大  阅读(10447)  评论(0编辑  收藏  举报