C# List<T>
转DataTable
学习自:博客园<吃了炫迈的猫>
Overview
数据!!个人认为程序就是将数据变着花样的显示它。那么这个时候我们的数据处理和获取就时我们的关键一步,如果你数据都处理不好,何谈形象的显示数据呢。
List<T> 转 DataTable
我们这边使用Entity Framework
从数据库获取数据。
我们先看一下完整的源码:
void ListToDataTable()
{
using (var context = new WorldSkillsChina2016Entities())
{
List<User> userList = (from a in context.User select a).ToList<User>();//将查询出来的User表 转换成一个集合
DataTable dt = new DataTable();//创建一个DataTable来存储数据
PropertyInfo[] properties = new User().GetType().GetProperties();//然后我们获取User表的所有属性。注意:是属性而不是字段。
foreach (var item in properties)//根据我们的属性创建DataTable的列
{
dt.Columns.Add(item.Name, item.PropertyType);
}
for (int i = 0; i < userList.Count; i++)//使用for循环添加数据
{
object[] objects = new object[properties.Length];//创建一个和User类等长的数组。
for (int a = 0; a < properties.Length; a++)
{
objects[a] = properties[a].GetValue(userList[i], null);//循环添加数据
}
dt.LoadDataRow(objects, true);//将数据作为一整行的形式添加到我们的DataGridView中。
}
this.dataGridView1.DataSource = dt;//数据实现绑定。
}
}
接着我们根据我们的源码来讲解一下。
- 首先我们创建了一个
List<User>
来接收我们的User表的数据。 - 然后我们创建一个
DataTable
。 - 获取User类的所有属性,只是属性不包含字段。
- 使用foreach 根据User类的属性,来创建我们DataTable的列。
- 接着使用for循环添加数据
- 创建一个和User表属性等长的一个数组 。
- 循环每个User对象根据的指定属性获取值,并依次付给数组的指定位置。
- 将整个数组以行的方式添加到我们的DataTable中。
- 最后将这个
DataTable
和DataGridView 进行绑定。