C# List<T> 转 DataTable

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 进行绑定。
原文地址:https://www.cnblogs.com/cao-1/p/12075990.html