using System;
using System.Collections.Generic;
using System.Data;
using System.Reflection; namespace CommonSD
{
/// <summary>
/// DataTable与实体类互相转换
/// </summary>
/// <typeparam name="T">实体类</typeparam>
public class ModelHandler<T> where T : new()
{
#region DataTable转换成实体类
/// <summary>
/// 填充对象列表:用DataSet的第一个表填充实体类
/// </summary>
/// <param name="ds">DataSet</param>
/// <returns></returns>
public List<T> FillModel(DataSet ds)
{
if (ds == null || ds.Tables[] == null || ds.Tables[].Rows.Count == )
{
return null;
}
else
{
return FillModel(ds.Tables[]);
}
}
/// <summary>
/// 填充对象列表:用DataSet的第index个表填充实体类
/// </summary>
public List<T> FillModel(DataSet ds, int index)
{
if (ds == null || ds.Tables.Count <= index || ds.Tables[index].Rows.Count == )
{
return null;
}
else
{
return FillModel(ds.Tables[index]);
}
}
/// <summary>
/// 填充对象列表:用DataTable填充实体类
/// </summary>
public List<T> FillModel(DataTable dt)
{
if (dt == null || dt.Rows.Count == )
{
return null;
}
List<T> modelList = new List<T>();
foreach (DataRow dr in dt.Rows)
{
//T model = (T)Activator.CreateInstance(typeof(T));
T model = new T();
for (int i = ; i < dr.Table.Columns.Count; i++)
{
PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
if (propertyInfo != null && dr[i] != DBNull.Value)
propertyInfo.SetValue(model, dr[i], null);
} modelList.Add(model);
}
return modelList;
}
/// <summary>
/// 填充对象:用DataRow填充实体类
/// </summary>
public T FillModel(DataRow dr)
{
if (dr == null)
{
return default(T);
}
//T model = (T)Activator.CreateInstance(typeof(T));
T model = new T();
for (int i = ; i < dr.Table.Columns.Count; i++)
{
PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
if (propertyInfo != null && dr[i] != DBNull.Value)
propertyInfo.SetValue(model, dr[i], null);
}
return model;
}
#endregion
#region 实体类转换成DataTable
/// <summary>
/// 实体类转换成DataSet
/// </summary>
/// <param name="modelList">实体类列表</param>
/// <returns></returns>
public DataSet FillDataSet(List<T> modelList)
{
if (modelList == null || modelList.Count == )
{
return null;
}
else
{
DataSet ds = new DataSet();
ds.Tables.Add(FillDataTable(modelList));
return ds;
}
}
/// <summary>
/// 实体类转换成DataTable
/// </summary>
/// <param name="modelList">实体类列表</param>
/// <returns></returns>
public DataTable FillDataTable(List<T> modelList)
{
if (modelList == null || modelList.Count == )
{
return null;
}
DataTable dt = CreateData(modelList[]);
foreach (T model in modelList)
{
DataRow dataRow = dt.NewRow();
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
}
dt.Rows.Add(dataRow);
}
return dt;
}
/// <summary>
/// 根据实体类得到表结构
/// </summary>
/// <param name="model">实体类</param>
/// <returns></returns>
private DataTable CreateData(T model)
{
DataTable dataTable = new DataTable(typeof(T).Name);
foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
{
dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
}
return dataTable;
}
#endregion
}
}

最新文章

  1. keleyi菜单0.1.5版本发布了
  2. 冰球项目日志2-yjw
  3. Vue.js 2.0 参考手册.CHM下载
  4. xsd、wsdl生成C#类的命令行工具使用方法
  5. JQuery判断checkbox是否选中-批量
  6. 解决spring-mvc @responseBody注解返回json 乱码问题
  7. PHP-mysqllib和mysqlnd
  8. Keepalived 双机web服务宕机检测切换系统软件
  9. DECIMAL Data Type
  10. (转)iOS Wow体验 - 第一章 - iOS人机界面设计规范纵览
  11. Rule Or WorkFlow
  12. http 双向通信之port映射
  13. VMware NAT端口映射外网访问虚拟机linux
  14. VS2012 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
  15. JavaScript 变量屏蔽
  16. 第一次Scrum冲刺——Life in CCSU
  17. Appium + Python 测试 QQ 音乐 APP的一段简单脚本
  18. 二叉搜索树(BST)详解
  19. ubuntu install wiznote
  20. gym101657 C

热门文章

  1. C# 实现二维数组的排序算法(代码)
  2. JavaScript正则表达式(四)
  3. koa2的安装
  4. SpringBoot搭建基于Spring+SpringMvc+Mybatis的REST服务
  5. Java冠军程序员告诉你如何提升技术
  6. 配置 app.js 文件
  7. Ajax中浏览器的缓存问题解决方法
  8. 【bzoj2733】[HNOI2012]永无乡
  9. MySQL Password Expired
  10. ListView 九宫格布局实现