DataTables List互相转换的实现类示例
本文导语: 代码如下:public static class DataTableHelper { public static DataTable ConvertTo(IList list) { DataTable table = CreateTable(); Type entityType = typeof(T); PropertyDescriptorCollection propert...
public static class DataTableHelper
{
public static DataTable ConvertTo(IList list)
{
DataTable table = CreateTable();
Type entityType = typeof(T);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
foreach (T item in list)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item);
table.Rows.Add(row);
}
return table;
}
public static IList ConvertTo(IList rows)
{
IList list = null;
if (rows != null)
{
list = new List();
foreach (DataRow row in rows)
{
T item = CreateItem(row);
list.Add(item);
}
}
return list;
}
public static IList ConvertTo(DataTable table)
{
if (table == null)
return null;
List rows = new List();
foreach (DataRow row in table.Rows)
rows.Add(row);
return ConvertTo(rows);
}
//Convert DataRow into T Object
public static T CreateItem(DataRow row)
{
string columnName;
T obj = default(T);
if (row != null)
{
obj = Activator.CreateInstance();
foreach (DataColumn column in row.Table.Columns)
{
columnName = column.ColumnName;
//Get property with same columnName
PropertyInfo prop = obj.GetType().GetProperty(columnName);
try
{
//Get value for the column
object value = (row[columnName].GetType() == typeof(DBNull))
? null : row[columnName];
//Set property value
if (prop.CanWrite) //判断其是否可写
prop.SetValue(obj, value, null);
}
catch
{
throw;
//Catch whatever here
}
}
}
return obj;
}
public static DataTable CreateTable()
{
Type entityType = typeof(T);
DataTable table = new DataTable(entityType.Name);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(entityType);
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, prop.PropertyType);
return table;
}
}
您可能感兴趣的文章:
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。