DataTable操作工具类DataTableHelper
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的更多相关文章
- Code片段 : .properties属性文件操作工具类 & JSON工具类
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “贵专” — 泥瓦匠 一.java.util.Properties API & 案例 j ...
- [转载]C# FTP操作工具类
本文转载自<C# Ftp操作工具类>,仅对原文格式进行了整理. 介绍了几种FTP操作的函数,供后期编程时查阅. 参考一: using System; using System.Collec ...
- 拼音操作工具类 - PinyinUtil.java
拼音操作工具类,提供字符串转换成拼音数组.汉字转换成拼音.取汉字的首字母等方法. 源码如下:(点击下载 -PinyinUtil.java.pinyin4j-2.5.0.jar ) import net ...
- 【转载】ASP.NET工具类:文件夹目录Directory操作工具类
在ASP.NET开发网站的过程中,有时候会涉及到文件夹相关操作,如判断文件夹目录是否存在.删除文件夹目录.创建文件.删除文件.复制文件夹等等.这一批有关文件目录的操作可以通过Directory类.Fi ...
- Java SE 之 数据库操作工具类(DBUtil)设计
JDBC创建数据库基本连接 //1.加载驱动程序 Class.forName(driveName); //2.获得数据库连接 Connection connection = DriverManager ...
- JavaScript时间操作工具类
/** * 时间操作工具类 * * @author zwq * */ var TimeFrameUtil = { /** * 格式化日期 * @param date {Date} 日期 * @para ...
- java基础37 集合框架工具类Collections和数组操作工具类Arrays
一.集合框架工具类:Collections 1.1.Collections类的特点 该工具类中所有的方法都是静态的 1.2.Collections类的常用方法 binarySearch(List< ...
- 文件操作工具类: 文件/目录的创建、删除、移动、复制、zip压缩与解压.
FileOperationUtils.java package com.xnl.utils; import java.io.BufferedInputStream; import java.io.Bu ...
- JAVA文件操作工具类(读、增、删除、复制)
使用JAVA的JFinal框架 1.上传文件模型类UploadFile /** * Copyright (c) 2011-2017, James Zhan 詹波 (jfinal@126.com). * ...
随机推荐
- [LeetCode OJ] Reorder List—Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
For example,Given {1,2,3,4}, reorder it to {1,4,2,3}. /** * Definition for singly-linked list. * str ...
- 【HAOI2011】向量
[题目描述] 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), (-b,a), (-b,-a)这些向量,问你能不能拼出另一个 ...
- 【POJ1753】Flip Game
[题目大意] 有一个4x4规格的一个棋盘,现在有16个一面黑一面白的棋子分布在这个棋盘上. 翻转一个棋子能够使它以及它上下左右的四个棋子从黑变白,从白变黑. 现在问你至少要经过多少次操作才能够使得整个 ...
- linux的du和df命令
今天也有同学问我Linux下查看目录大小的命令,现在也将前阵子学习到du/df两个命令总结一下吧.前阵子测试工作中有遇到过由于磁盘空间满导致程序无法执行到情况,所以使用了df和du两个命令. du查看 ...
- oracle触发器应用
首先给大家推荐两篇我看后的博文,我已经内容转载过来: 1.对触发器的讲解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建 ...
- ucenter 通信原理
1.用户登录discuz,通过logging.php文件中的函数uc_user_login对post过来的数据进行验证,也就是对username和password进行验证. 2.如果验证成功,将调用位 ...
- css 属性之绝对定位
<html><head><style type="text/css">h2.pos_abs{position:absolute;left:100 ...
- How to create Managed Metadata Column
This article introduce how to create/use managed metadata column from List. First, we need to config ...
- 针对上一篇文章中的代码,想出的重构方案(python实现)
#!/usr/bin/env python class Processor: def __init__(self, processor): self.processor = processor def ...
- ExtJS5_MVVM特性的简单说明
下面我们来看一下自动生成的代码中的MVVM架构的关系.Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类. 在上面的图片中,左边是Main. ...