/// <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。
|
请发表评论