C#将对象数组转换成DataSet使用案例
2009-03-19 12:40
519 查看
在使用asp.net 2.0 beta 2 开发项目的过程中,碰到了将对象数组绑定到GridView的数据源上,但是使用排序的时候,却发现GridView并不提供对对象数组的支持,而在微软的官方网站上我们可以看到GridView的排序只有当数据源是DataSet的时候才支持,所以对于某些采用了O/R映射的项目或者返回的数据源是对象数组的项目中,就需要考虑提供将对象数组转换为DataSet的方法了,否则就要自己来手工来实现每一个GridView的排序,降低了开发效率。
在微软的.net开发类库中,我们找不到现成转换方法,所以就需要考虑自行开发这个功能了,然而实现起来并不是很复杂,其中要用到的主要技术就是反射。利用反射,我们能够获取该对象数组中对象的每一个属性,包括其名称、类型,然后利用这些信息来创建DataSet中数据表的Schema,当创建完成以后,将该对象数组的每一个对象的属性数据复制到刚才创建的数据表中,这样就很简单的完成了该功能的实现,还是用代码来说的更清楚些:
文件:objectArrayToDataSet.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Reflection;
public class ArrayToDataSet
{
public static DataSet ObjectArrayToDataSet(object[] objArr)
{
if (objArr.Length == 0)
return null;
DataSet ds = CreateDataSet(objArr[0].GetType());
ds = FillDataSet(ds, objArr);
return ds;
}
public static DataSet CreateDataSet(Type t)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
PropertyInfo[] pis = t.GetProperties();
foreach (PropertyInfo pi in pis)
{
DataColumn dc = new DataColumn(pi.Name, pi.PropertyType);
dt.Columns.Add(dc);
}
return ds;
}
public static DataSet FillDataSet(DataSet ds, object[] objArr)
{
DataColumnCollection dcs = ds.Tables[0].Columns;
Type t = objArr[0].GetType();
foreach (object obj in objArr)
{
DataRow dr = ds.Tables[0].NewRow();
for (int i = 0; i < dcs.Count; i++)
{
dr[i] = t.InvokeMember(dcs[i].ColumnName, BindingFlags.GetProperty, null, obj, null);
}
ds.Tables[0].Rows.Add(dr);
}
return ds;
}
}
在微软的.net开发类库中,我们找不到现成转换方法,所以就需要考虑自行开发这个功能了,然而实现起来并不是很复杂,其中要用到的主要技术就是反射。利用反射,我们能够获取该对象数组中对象的每一个属性,包括其名称、类型,然后利用这些信息来创建DataSet中数据表的Schema,当创建完成以后,将该对象数组的每一个对象的属性数据复制到刚才创建的数据表中,这样就很简单的完成了该功能的实现,还是用代码来说的更清楚些:
文件:objectArrayToDataSet.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Reflection;
public class ArrayToDataSet
{
public static DataSet ObjectArrayToDataSet(object[] objArr)
{
if (objArr.Length == 0)
return null;
DataSet ds = CreateDataSet(objArr[0].GetType());
ds = FillDataSet(ds, objArr);
return ds;
}
public static DataSet CreateDataSet(Type t)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
ds.Tables.Add(dt);
PropertyInfo[] pis = t.GetProperties();
foreach (PropertyInfo pi in pis)
{
DataColumn dc = new DataColumn(pi.Name, pi.PropertyType);
dt.Columns.Add(dc);
}
return ds;
}
public static DataSet FillDataSet(DataSet ds, object[] objArr)
{
DataColumnCollection dcs = ds.Tables[0].Columns;
Type t = objArr[0].GetType();
foreach (object obj in objArr)
{
DataRow dr = ds.Tables[0].NewRow();
for (int i = 0; i < dcs.Count; i++)
{
dr[i] = t.InvokeMember(dcs[i].ColumnName, BindingFlags.GetProperty, null, obj, null);
}
ds.Tables[0].Rows.Add(dr);
}
return ds;
}
}
相关文章推荐
- C#如何将对象数组转换成DataSet
- 对象数组空指针异常说明——C#中使用对象数组必须分别为其开辟空间
- C# json字符串 转换成数组、集合、相应对象
- 使用 Visual C# .NET 从数据库填充 DataSet 对象http://support.microsoft.com/kb/314145/
- C# 对象、文件与二进制串(byte数组)之间的转换
- (C#)中的DataSet、string、DataTable等对象转换成Json
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
- PHP数组与对象之间使用递归实现转换的方法
- 【原】使用Json作为Python和C#混合编程时对象转换的中间文件
- 如何使用 Visual C# .NET 从 DataSet 对象更新数据库
- 如何使用 Visual C# 2005 或 Visual C# .NET 通过 DataSet 对象更新数据库
- 对象数组空指针异常说明——C#中使用对象数组必须分别为其开辟空间
- 如何使用List.toArray()转换为数组对象
- 如何使用List.toArray()转换为数组对象
- C#中的DataSet、string、DataTable 、对象转换成Json
- C#.NET开发Winform使用MySQL数据库 无法将“System.Byte[]”的对象强制转换为类型“System.IConvertible”
- 关于C#中数组、ArrayList与List三个对象的使用区别
- 如何使用 Visual C# 2005 或 Visual C# .NET 通过 DataSet 对象更新数据库
- HOW TO:使用 Visual C# .NET 从数据库填充 DataSet 对象
- windows mobile平台中使用C#将byte数组转换为Format24bppRgb格式的图片