• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#把数组转换成DataSet数据类型

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

/// <summary>
    /// 将数组转换成DataSet的类
    /// </summary>
    class ArrayTransformDataSet
    {
        /// <summary>
        /// 获取转换后的DataSet
        /// </summary>
        /// <param name="obj">数组对象</param>
        /// <returns>DataSet类型</returns>
        public static DataSet GetDataSet(object[] obj)
        {
            if (obj == null)
            {
                //先判断数组是否为空
                return null;
            }
            else
            {
                return GetProperties(obj);
            }
        }
        /// <summary>
        /// 设置表头
        /// </summary>
        /// <param name="obj">数组对象</param>
        /// <returns>DataSet类型</returns>
        private static DataSet GetProperties(object[] obj)
        {
            Type t=obj[0].GetType();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            ds.Tables.Add(dt);
            PropertyInfo[] properties = t.GetProperties();
            foreach (PropertyInfo pro in properties)
            {
                dt.Columns.Add(new DataColumn(pro.Name, pro.PropertyType));
            }
            return GetAllData(ds, obj, t);
        }
        /// <summary>
        /// 填充DataSet
        /// </summary>
        /// <param name="ds">没有数据的DataSet</param>
        /// <param name="obj">数组对象</param>
        /// <param name="t">数组中第一组的类型</param>
        /// <returns>DataSet类型</returns>
        private static DataSet GetAllData(DataSet ds, object[] obj,Type t)
        {
            DataColumnCollection collection = ds.Tables[0].Columns;
            foreach (object var in obj)
            {
                DataRow dr = ds.Tables[0].NewRow();
                for (int i = 0; i < collection.Count; i++)
                {
                    dr = t.InvokeMember(collection.ColumnName, BindingFlags.GetProperty, null, var, null);
                }
                ds.Tables[0].Rows.Add(dr);
            }
            return ds;
        }


C#ObjectInvokeMember(stringname,BindingFlagsinvokeAttr,Binderbinder,Objecttarget,Object[]args)参数
nameString,它包含要调用的构造函数、方法、属性或字段成员的名称。
- 或 -
空字符串 (""),表示调用默认成员。
- 或 -
对于 IDispatch 成员,一个表示 DispID 的字符串,例如“[DispID=3]”。
invokeAttr一个位屏蔽,由一个或多个指定搜索执行方式的BindingFlags组成。访问可以是 BindingFlags 之一,如 Public、NonPublic、Private、InvokeMethod 和 GetField 等。不需要指定查找类型。如果省略查找类型,则将应用 BindingFlags.Public |BindingFlags.Instance。
binder一个Binder对象,该对象定义一组属性并启用绑定,而绑定可能涉及选择重载方法、强制参数类型和通过反射调用成员。
- 或 -
若为空引用(在 Visual Basic 中为 Nothing),则使用DefaultBinder。
target要在其上调用指定成员的Object。
args包含传递给要调用的成员的参数的数组。


返回值表示被调用成员的返回值的 Object。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#生成带项目编号的Word段落发布时间:2022-07-14
下一篇:
zt对于C#中的FileUpload解决文件上传大小限制的问题设置发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap