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);
时间: 2024-10-12 13:20:29

C# 将list<>泛型集合 转化为 DataTable的相关文章

vb.net环境下将DataTable转成泛型集合方法

背景 做机房收费系统的时候,遇到这样一个问题,将数据库表中的数据取出一行,将每个单元格中的内容填充到窗体 的文本框中.考虑到用DataReader获取结果的复杂性,我就用了泛型集合.可是这么一用却出现了如图所示的问 题. 问题一: 出现这种问题,是因为在DataTable转实体类型时表的字段类型和实体的字段类型不一致造成的. 这个也可以 这么说,中国人的孩子都随父姓,这是传统.但孩子随母姓,就有些不妥. 问题二: 数据库表中字段名和要转换的实体属性字段名不一致,导致转换后实体中depart为空值

vb.net机房收费 &amp; 泛型集合-实现文本框显示记录

     做基本数据设定窗体,本以为实现这个小小的窗体应该是最简单的吧!不就是单击修改按钮,进行修改:然后单击更新按钮来对数据基本设定进行更新吗?可是当一出手就遇到了问题,数据表中的数据该怎么显示在文本框中呢?这真的一下子难住了自己!不过遇到问题总会有解决的办法. 既然是让实体一个一个返回到文本框中来,那么直接调用实体层应该就可以吧!这样不就可以完美的实现了吗?可是这样最大的缺点则是:以后遇到的控件与数据调用的窗体比比即是,这样不就又重蹈覆辙实现了代码的重复吗?很严重的违背了为了把重复的部分提取

泛型List集合转化为DateTable的扩展方法

文章出处:http://www.codeproject.com/Tips/867866/Extension-Method-for-Generic-List-Collection-to-Da 这段代码是能够帮助你把泛型集合List转出成DataTable的扩展方法. 背景: 不知道你是否知道这个扩展方法,但是你可以不做任何修改的去使用下面这个类的代码. 使用代码:   using System; using System.Collections.Generic; using System.Comp

DataTable转化为泛型集合

前一段时间,因为做机房重构基本思路都没有搞清楚,然后周围接触的概念太多了,就想一开始什么都加上,不堪重负,起步很慢.后来经亮哥提点,一点一点的加东西,就好很多了. 对于泛型集合,前面有很多男神女神已经写的很详细了.但是知识自己总结的才能算是印脑子里了.我就写写自己的理解吧. 看完关于泛型集合的相关资料(博客.设计模式.网上其他一些介绍...),理一理思路: 是什么? [泛型是具有占位符(类型参数)的类.结构.接口和方法.这些占位符是类.结构.接口和方法所存储或使用的一个或多个类型的占位符. 泛型

[工具类]DataTable与泛型集合List互转

写在前面 工作中经常遇到datatable与list,对于datatable而言操作起来不太方便.所以有的时候还是非常希望通过泛型集合来进行操作的.所以这里就封装了一个扩展类.也方便使用. 类 方法中主要使用了反射的方式动态的为属性赋值以及取值. public static class Extension { /// <summary> /// 将datatable转换为泛型集合 /// </summary> /// <typeparam name="TEntity

泛型集合转换为DataTable

在做项目中,遇到了将集合转换为DataTable的使用,在网上看了资料,在这里记录下来,分享. using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Wolfy.List2DataTable { class Pro

使用泛型集合代替datatable作为返回值实现面向对象

开会的时候,师父说,我们在机房重构时,尽量不要用datatable作为返回值,改用泛型集合的方式,这样可以实现真正的面向对象.通过查资料和同学交流,把这个问题给解决了.对于泛型集合,我也有了一些认识. 一.对泛型集合的认识 1.存在于System.Collection,Generic的命名空间中,在用的时候,需要引用 2.泛型是具有占位符(类型参数)的类,结构,接口和方法.就是说,在泛型集合中加入的数据必须符合指定的类型<T>,否则编译时就会报错. 以上为设计模式培训实习生的内容. 那泛型集合

机房重构——泛型集合

敲三层的时候就听师傅说过泛型,只不过当时没有特别的注意.当敲用户登录窗体时,我遇到这样的问题,就是我们需要经过验证输入的信息的正误之后才能登录或者不能登录.判断时,需要返回我们从数据库中查到的信息,那么问题就来了,如何返回呢? 一开始我一直用的是DataTable返回数据的,但是当去判断的时候我不知道如何下手了,按照以往的经验,我们可以使用table.rows()或table.field(),具体的实现方法可以自己试验一下.这种方法虽然可以实现,可是里面重复的内容太多了,尤其是每次使用一个字段时

DataSet装换为泛型集合 222

#region DataSet装换为泛型集合 /// <summary> /// 利用反射和泛型 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static List<T> ConvertToList<T>(DataTable dt) { // 定义集合 List<T> ts