ASP.net:如何将对象数组转换成DataSet

在使用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;         }     }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值