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

/// <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。

posted @ 2012-09-20 13:44  Mancy  阅读(827)  评论(0编辑  收藏  举报