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