C# List转DataTable(反射)
2013-12-11 21:19
232 查看
.net C# List转DataTable(反射)发布时间:2013/11/18
10:38:57, 浏览数量:54
.net C# List转DataTable(反射) ,方法如下:
注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。
需改成:result.Columns.Add(pi.Name);
命名空间:using System.Reflection;
/// <summary>
/// 将集合类转换成DataTable
/// </summary>
/// <param name="list">集合</param>
/// <returns></returns>
public static DataTable ToDataTable(IList list)
{
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T">集合项类型</typeparam>
/// <param name="list">集合</param>
/// <returns>数据集(表)</returns>
public static DataTable ToDataTable<T>(IList<T> list)
{
return ToDataTable<T>(list, null);
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T">集合项类型</typeparam>
/// <param name="list">集合</param>
/// <param name="propertyName">需要返回的列的列名</param>
/// <returns>数据集(表)</returns>
public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
{
List<string> propertyNameList = new List<string>();
if (propertyName != null)
propertyNameList.AddRange(propertyName);
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0)
{
result.Columns.Add(pi.Name, pi.PropertyType);//
}
else
{
if (propertyNameList.Contains(pi.Name))
result.Columns.Add(pi.Name, pi.PropertyType);//
}
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
else
{
if (propertyNameList.Contains(pi.Name))
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
}
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
数据绑定:
List<Model.Merchant> list1 = new BLL.Merchant().DataTableToList(dt);
DataTable dt11 = ToDataTable<Model.Merchant>(list1);
this.GridView1.DataSource = dt11;
GridView1.DataBind();
注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。
需改成:result.Columns.Add(pi.Name);
实践是检验真理的唯一标准,希望能帮助到大家。
10:38:57, 浏览数量:54
.net C# List转DataTable(反射) ,方法如下:
注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。
需改成:result.Columns.Add(pi.Name);
命名空间:using System.Reflection;
/// <summary>
/// 将集合类转换成DataTable
/// </summary>
/// <param name="list">集合</param>
/// <returns></returns>
public static DataTable ToDataTable(IList list)
{
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T">集合项类型</typeparam>
/// <param name="list">集合</param>
/// <returns>数据集(表)</returns>
public static DataTable ToDataTable<T>(IList<T> list)
{
return ToDataTable<T>(list, null);
}
/// <summary>
/// 将泛型集合类转换成DataTable
/// </summary>
/// <typeparam name="T">集合项类型</typeparam>
/// <param name="list">集合</param>
/// <param name="propertyName">需要返回的列的列名</param>
/// <returns>数据集(表)</returns>
public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
{
List<string> propertyNameList = new List<string>();
if (propertyName != null)
propertyNameList.AddRange(propertyName);
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0)
{
result.Columns.Add(pi.Name, pi.PropertyType);//
}
else
{
if (propertyNameList.Contains(pi.Name))
result.Columns.Add(pi.Name, pi.PropertyType);//
}
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
if (propertyNameList.Count == 0)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
else
{
if (propertyNameList.Contains(pi.Name))
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
}
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
数据绑定:
List<Model.Merchant> list1 = new BLL.Merchant().DataTableToList(dt);
DataTable dt11 = ToDataTable<Model.Merchant>(list1);
this.GridView1.DataSource = dt11;
GridView1.DataBind();
注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。
需改成:result.Columns.Add(pi.Name);
实践是检验真理的唯一标准,希望能帮助到大家。
相关文章推荐
- .net框架读书笔记---反射(二)
- 枚举、反射的学习
- 【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)
- JAVA反射机制深入学习(一)Java反射概念解析
- 反射
- 进入内存看反射
- MFC消息反射
- python中的反射
- 反射-构造器
- 反射的技术
- 企业库、抽象工厂、单例、反射、分层的简单的学习示例源码【转】
- 反射
- Java学习之-动态编译-DynamicCompile_反射调用
- 用反射实现PropertyGrid中的属性动态实现只读、可见
- 反射-通过反射获取无参构造方法并使用
- 使用反射简化日常操作(转)
- C#中反射接受的字符串需要满足的Backus-Naur Form语法
- IOC概念,反射例子
- 通过spring反射工具类ReflectionUtils 得到所有定义的变量
- Java—反射机制