使用TypeDescriptor.GetProperties方法,实现把List<T>对象转换成DataTable
using System;
using System.ComponentModel;
namespace Document.Data {
public class ExportDocumentModel {
[DisplayName("Id")]
public int Id { get; set; }
[DisplayName("Title")]
public string Title { get; set; }
[DisplayName("CreateDate")]
public DateTime CreateDate { get; set; }
}
}
public DataTable ConvertModelToDataTable(List<ExportDocumentModel> exportDocumentModels) {
DataTable dataTable = new DataTable();
var propertyDescriptorCollection = TypeDescriptor.GetProperties(new ExportDocumentModel());//通过反射获取该类的属性集合
foreach (PropertyDescriptor propertyDescriptor in propertyDescriptorCollection) {
DisplayNameAttribute displayNameAttribute = propertyDescriptor.Attributes[typeof(DisplayNameAttribute)] as DisplayNameAttribute;//获取其中的DisplayNameAttribute属性
if (displayNameAttribute != null) {
dataTable.Columns.Add(displayNameAttribute.DisplayName);//获取属性名称,赋值为DataTable列头
}
}
foreach (ExportDocumentModel exportDocumentModel in exportDocumentModels) {
DataRow dataRow = dataTable.NewRow();
foreach (PropertyDescriptor propertyDescriptor in propertyDescriptorCollection) {
DisplayNameAttribute displayNameAttribute = propertyDescriptor.Attributes[typeof(DisplayNameAttribute)] as DisplayNameAttribute;
if (displayNameAttribute != null) {
var val = exportDocumentModel.GetPropertyValue(propertyDescriptor.Name);//根据属性名称获取属性值
dataRow[displayNameAttribute.DisplayName] = val;//根据属性名称为DataTable中对应的列赋值
}
}
dataTable.Rows.Add(dataRow);
}
return dataTable;
}