您的位置:首页 > 编程语言 > C#

C# List转DataTable(反射)

2013-12-11 21:19 232 查看
.net C# List转DataTable(反射)发布时间:2013/11/18
10:38:57, 浏览数量:54

.net C# List转DataTable(反射) ,方法如下:

注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。

需改成:result.Columns.Add(pi.Name);



命名空间:using System.Reflection;



/// <summary>

/// 将集合类转换成DataTable

/// </summary>

/// <param name="list">集合</param>

/// <returns></returns>

public static DataTable ToDataTable(IList list)

{

DataTable result = new DataTable();

if (list.Count > 0)

{

PropertyInfo[] propertys = list[0].GetType().GetProperties();

foreach (PropertyInfo pi in propertys)

{

result.Columns.Add(pi.Name, pi.PropertyType);

}

for (int i = 0; i < list.Count; i++)

{

ArrayList tempList = new ArrayList();

foreach (PropertyInfo pi in propertys)

{

object obj = pi.GetValue(list[i], null);

tempList.Add(obj);

}

object[] array = tempList.ToArray();

result.LoadDataRow(array, true);

}

}

return result;

}

/// <summary>

/// 将泛型集合类转换成DataTable

/// </summary>

/// <typeparam name="T">集合项类型</typeparam>

/// <param name="list">集合</param>

/// <returns>数据集(表)</returns>

public static DataTable ToDataTable<T>(IList<T> list)

{

return ToDataTable<T>(list, null);

}

/// <summary>

/// 将泛型集合类转换成DataTable

/// </summary>

/// <typeparam name="T">集合项类型</typeparam>

/// <param name="list">集合</param>

/// <param name="propertyName">需要返回的列的列名</param>

/// <returns>数据集(表)</returns>

public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)

{

List<string> propertyNameList = new List<string>();

if (propertyName != null)

propertyNameList.AddRange(propertyName);

DataTable result = new DataTable();

if (list.Count > 0)

{

PropertyInfo[] propertys = list[0].GetType().GetProperties();

foreach (PropertyInfo pi in propertys)

{

if (propertyNameList.Count == 0)

{

result.Columns.Add(pi.Name, pi.PropertyType);//

}

else

{

if (propertyNameList.Contains(pi.Name))

result.Columns.Add(pi.Name, pi.PropertyType);//

}

}

for (int i = 0; i < list.Count; i++)

{

ArrayList tempList = new ArrayList();

foreach (PropertyInfo pi in propertys)

{

if (propertyNameList.Count == 0)

{

object obj = pi.GetValue(list[i], null);

tempList.Add(obj);

}

else

{

if (propertyNameList.Contains(pi.Name))

{

object obj = pi.GetValue(list[i], null);

tempList.Add(obj);

}

}

}

object[] array = tempList.ToArray();

result.LoadDataRow(array, true);

}

}

return result;

}



数据绑定:

List<Model.Merchant> list1 = new BLL.Merchant().DataTableToList(dt);

DataTable dt11 = ToDataTable<Model.Merchant>(list1);

this.GridView1.DataSource = dt11;

GridView1.DataBind();



注:result.Columns.Add(pi.Name, pi.PropertyType); 可能会出现 DataSet 不支持 System.Nullable<>的错误。

需改成:result.Columns.Add(pi.Name);



实践是检验真理的唯一标准,希望能帮助到大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: