DataTable操作工具类DataTableHelper。

功能介绍:

  • 将泛型集合填充为数据表
  • 将泛型填充为数据表
  • 将对象集合填充为数据表
  • 将对象填充为数据表
  • 将定IDictionary数据转换为DataSet数据
  • 将数据表填充为泛型集合
  • 将数据表填充为泛型集合
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Reflection;
    using System.Data;
    using System.Collections; namespace IM.Common
    {
    /// <summary>
    /// 数据操作
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    public class DataHelper
    {
    /// <summary>
    /// 将泛型集合填充为数据表
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="list">泛型集合</param>
    /// <param name="tableName">表名</param>
    /// <returns>数据表</returns>
    public static DataTable Fill<T>(IList<T> list, string tableName)
    {
    DataTable dt = new DataTable(tableName);
    T t = Activator.CreateInstance<T>();
    Type type = t.GetType();
    PropertyInfo[] properties = type.GetProperties().Where(p => p.MemberType == MemberTypes.Property && p.CanRead).ToArray();
    foreach (PropertyInfo p in properties)
    {
    dt.Columns.Add(p.Name);
    }
    foreach (T t1 in list)
    {
    PropertyInfo[] properties1 = t1.GetType().GetProperties().Where(p => p.MemberType == MemberTypes.Property && p.CanRead).ToArray();
    DataRow dr = dt.NewRow();
    for (int i = ; i < dt.Columns.Count; i++)
    {
    PropertyInfo propertyInfo = properties1.SingleOrDefault(p => p.Name == Convert.ToString(dt.Columns[i].ColumnName));
    if (propertyInfo != null)
    {
    dr[dt.Columns[i].ColumnName] = propertyInfo.GetValue(t1, null);
    }
    }
    dt.Rows.Add(dr);
    }
    return dt;
    } /// <summary>
    /// 将泛型填充为数据表
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="t">泛型</param>
    /// <param name="tableName">表名</param>
    /// <returns>数据表</returns>
    public static DataTable Fill<T>(T t, string tableName)
    {
    IList<T> list = new List<T>();
    if (t != null)
    {
    list.Add(t);
    }
    return Fill<T>(list, tableName);
    } /// <summary>
    /// 将对象集合填充为数据表
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="list">对象集合</param>
    /// <param name="tableName">表名</param>
    /// <returns>数据表</returns>
    public static DataTable Fill(IList list, string tableName)
    {
    DataTable dt = new DataTable(tableName);
    if (list.Count > )
    {
    PropertyInfo[] properties = list[].GetType().GetProperties().Where(p => p.MemberType == MemberTypes.Property && p.CanRead).ToArray();
    foreach (PropertyInfo p in properties)
    {
    dt.Columns.Add(p.Name);
    }
    foreach (var t in list)
    {
    PropertyInfo[] properties1 = t.GetType().GetProperties().Where(p => p.MemberType == MemberTypes.Property && p.CanRead).ToArray();
    DataRow dr = dt.NewRow();
    for (int i = ; i < dt.Columns.Count; i++)
    {
    PropertyInfo propertyInfo = properties1.SingleOrDefault(p => p.Name == Convert.ToString(dt.Columns[i].ColumnName));
    if (propertyInfo != null)
    {
    dr[dt.Columns[i].ColumnName] = propertyInfo.GetValue(t, null);
    }
    }
    dt.Rows.Add(dr);
    }
    }
    return dt;
    } /// <summary>
    /// 将对象填充为数据表
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="obj">对象</param>
    /// <param name="tableName">表名</param>
    /// <returns>数据表</returns>
    public static DataTable Fill(Object obj, string tableName)
    {
    IList list = null;
    if (typeof(IEnumerable).IsAssignableFrom(obj.GetType()))
    {
    list = (IList)obj;
    }
    else
    {
    list = new ArrayList();
    if (obj != null)
    {
    list.Add(obj);
    }
    }
    return Fill(list, tableName);
    } /// <summary>
    /// 将定IDictionary数据转换为DataSet数据
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="dictionary">键值对数据:key表名,value实体(或实体集合)</param>
    /// <returns>DataSet数据集</returns>
    public static DataSet Fill(IDictionary dictionary)
    {
    DataSet ds = new DataSet();
    foreach (DictionaryEntry de in dictionary)
    {
    DataTable dt = Fill(de.Value, de.Key.ToString());
    ds.Tables.Add(dt);
    }
    return ds;
    } /// <summary>
    /// 将数据表填充为泛型集合
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="dataTable">数据表</param>
    /// <returns>泛型集合</returns>
    public static IList<T> FillList<T>(DataTable dataTable)
    {
    IList<T> list = list = new List<T>();
    if (dataTable != null && dataTable.Rows.Count > && dataTable.Columns.Count > )
    {
    List<string> columnNameList = new List<string>();
    for (int i = ; i < dataTable.Columns.Count; i++)
    {
    columnNameList.Add(dataTable.Columns[i].ColumnName);
    }
    for (int i = ; i < dataTable.Rows.Count; i++)
    {
    DataRow dr = dataTable.Rows[i];
    T t = Activator.CreateInstance<T>();
    Type type = t.GetType();
    PropertyInfo[] properties = type.GetProperties().Where(p => p.MemberType == MemberTypes.Property && p.CanWrite).ToArray();
    foreach (PropertyInfo p in properties)
    {
    if (columnNameList.Contains(p.Name) && dr[p.Name] != DBNull.Value)
    {
    if (p.PropertyType.IsGenericType)
    {
    p.SetValue(t, Convert.ChangeType(dr[p.Name], p.PropertyType.GetGenericArguments()[]), null);
    }
    else
    {
    p.SetValue(t, Convert.ChangeType(dr[p.Name], p.PropertyType), null);
    }
    }
    }
    list.Add(t);
    }
    }
    return list;
    } /// <summary>
    /// 将数据表填充为泛型集合
    /// <para>创建作者:changjin</para>
    /// <para>创建日期:2011/07/26</para>
    /// </summary>
    /// <param name="dataTable">数据表</param>
    /// <returns>泛型集合</returns>
    public static T Fill<T>(DataTable dataTable)
    {
    return FillList<T>(dataTable)[];
    }
    }
    }

DataTable操作工具类DataTableHelper的更多相关文章

  1. Code片段 : .properties属性文件操作工具类 & JSON工具类

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...

  2. [转载]C# FTP操作工具类

    本文转载自<C# Ftp操作工具类>,仅对原文格式进行了整理. 介绍了几种FTP操作的函数,供后期编程时查阅. 参考一: using System; using System.Collec ...

  3. 拼音操作工具类 - PinyinUtil.java

    拼音操作工具类,提供字符串转换成拼音数组.汉字转换成拼音.取汉字的首字母等方法. 源码如下:(点击下载 -PinyinUtil.java.pinyin4j-2.5.0.jar ) import net ...

  4. 【转载】ASP.NET工具类:文件夹目录Directory操作工具类

    在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...

  5. Java SE 之 数据库操作工具类(DBUtil)设计

    JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...

  6. JavaScript时间操作工具类

    /** * 时间操作工具类 * * @author zwq * */ var TimeFrameUtil = { /** * 格式化日期 * @param date {Date} 日期 * @para ...

  7. java基础37 集合框架工具类Collections和数组操作工具类Arrays

    一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...

  8. 文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.

    FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.Bu ...

  9. JAVA文件操作工具类(读、增、删除、复制)

    使用JAVA的JFinal框架 1.上传文件模型类UploadFile /** * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com). * ...

随机推荐

  1. 读书笔记 |Google C++编程风格指南

    Google C++编程风格指南 ## 0. 背景 每一个C++程序员都知道,C++具有很多强大的语言特性,但这种强大不可避免的导致它的复杂,这种复杂会使得代码更易于出现bug.难于阅读和维护. 本指 ...

  2. 你好,C++(32) 类是对现实世界的抽象和描述 6.2.1 类的声明和定义

    6.2  类:当C++爱上面向对象 类这个概念是面向对象思想在C++中的具体体现:它既是封装的结果,同时也是继承和多态的载体.因此,要想学习C++中的面向对象程序设计,也就必须从“类”开始. 6.2. ...

  3. Mysql 索引的基础(下)

    如果需要存储大量的URL并需要根据URL进行搜索查找.如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长.正常情况下会有如下查询: SELECT id FROM url WH ...

  4. 关于一个隐藏和显示物品列表的demo

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. 15 3Sum(寻找三个数之和为指定数的集合Medium)

    题目意思:给一个乱序数组,在里面寻找三个数之和为0的所有情况,这些情况不能重复,增序排列 思路:前面2sum,我用的是map,自然那道题map比双指针效率高,这道题需要先排序,再给三个指针,i.j.k ...

  6. JS判断鼠标从哪个方向进入DIV容器

    写的不够高大上 , 不要介意哦... Js: //进去 $(".flash").bind("mouseenter",function(e){ /** the w ...

  7. Rotate List 面试题

    今天做了leetcode的Rotate List,刚开始头脑不清楚,写的乱七八糟的,后来改了下,提交了,能过,把代码贴出来. 做题的时候头脑要清楚,我刚开始做完的时候才发现我把向左向右移动弄反了,后来 ...

  8. Equivalent Strings (字符串相等?)

    Equivalent Strings   E - 暴力求解.DFS Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I ...

  9. 转:hadoop知识整理

    文章来自于:http://tianhailong.com/hadoop%E7%9F%A5%E8%AF%86%E6%95%B4%E7%90%86.html 按照what.how.why整理了下文章,帮助 ...

  10. 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?

    深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...