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);
so easy