这里,我试图将用户列表uow.Repository<User>().GetAll().ToList();绑定到DataTable dt,但有一个错误,即不能将“system.collections.generic.list”类型转换为“system.data.datatable”行dt = uow.Repository<User>().GetAll().ToList();。
下面是我的代码
public DataTable GetAllUser1()
{
DataTable dt = new DataTable();
dt = uow.Repository<User>().GetAll().ToList();
return dt;
}任何帮助都会很高的appreciated.Thank你
发布于 2017-12-25 05:50:03
可以使用以下方法将列表转换为DataTable
public DataTable GetAllUser1()
{
DataTable dt = new DataTable();
dt = ToDataTable(uow.Repository<User>().GetAll().ToList());
return dt;
}
public DataTable ToDataTable<T>(List<T> items)
{
DataTable dataTable = new DataTable(typeof(T).Name);
//Get all the properties
PropertyInfo[] Props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (PropertyInfo prop in Props)
{
//Setting column names as Property names
dataTable.Columns.Add(prop.Name);
}
foreach (T item in items)
{
var values = new object[Props.Length];
for (int i = 0; i < Props.Length; i++)
{
//inserting property values to datatable rows
values[i] = Props[i].GetValue(item, null);
}
dataTable.Rows.Add(values);
}
//put a breakpoint here and check datatable
return dataTable;
}发布于 2017-12-25 05:33:20
可以使用下面的DataTable将列表转换为method
public DataTable GetAllUser1()
{
DataTable dt = new DataTable();
dt =ToDataTable(uow.Repository<User>().GetAll().ToList());
return dt;
}
public static DataTable ToDataTable<T>(this IList<T> data)
{
PropertyDescriptorCollection properties =
TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}发布于 2017-12-25 05:42:50
DataTable dt = new DataTable();
dt = uow.Repository<User>().GetAll().ToList();不是那样的。您应该使用DataTable方法来填充它。提供一个例子将提供更好的理解。例如,User类包含这些属性;
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}您应该为DataTable指定列;
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Name");现在,您可以在一个简单的循环中添加行;
var userList = uow.Repository<User>().GetAll().ToList();
DataTable dt = new DataTable();
dt.Columns.Add("Id");
dt.Columns.Add("Name");
foreach (var user in userList)
{
var newRow = dt.NewRow();
newRow["Id"] = user.Id;
newRow["Name"] = user.Name;
dt.Rows.Add(newRow);
}另外,您可以通过获取属性并使用Reflection访问它们来动态地提供解决方案。
https://stackoverflow.com/questions/47965931
复制相似问题