首页 新闻 搜索 专区 学院

List To Datatable 让我怀疑人生了。。

0
悬赏园豆:5 [已解决问题] 解决于 2020-11-25 17:35

好久没有写这样的代码了,由于DX控件的需要自行封装一个集合与DataTable转的方法。

结果在dt.NewRow()的时候居然没有列名?前面不是定义列明了吗?怎么回事呢?

      private DataTable ListToDataTable<T>(IList<T> list) where T : class, new()
        {
            if (list == null || list.Count == 0)
            {
                return null;
            }
            DataTable dt = new DataTable(typeof(T).Name);
            //列
            dt.Columns.AddRange(typeof(T).GetProperties().Select(p => new DataColumn(p.Name, p.DeclaringType)).ToArray());
            //行
            foreach (var item in list)
            {
                //添加空白行
                var row = dt.NewRow();
                foreach (var p in typeof(T).GetProperties())
                {
                    row[p.Name] = p.GetValue(item, null) ?? DBNull.Value;
                }
                dt.Rows.Add(row);
            }
            return dt;
        }
Jonny-Xhl的主页 Jonny-Xhl | 小虾三级 | 园豆:664
提问于:2020-11-23 11:25
< >
分享
最佳答案
0

你打个断点不就知道了?

//列
dt.Columns.AddRange(typeof(T).GetProperties().Select(p => new DataColumn(p.Name, p.DeclaringType)).ToArray());

执行后没有问题,列名不是都添加上了吗?

而且你这添加 DataColumn 的代码是错的,

p.DeclaringType 并不能获取到属性的类型

收获园豆:5
Rotin | 菜鸟二级 |园豆:211 | 2020-11-24 11:04

是因为Type的问题,使用p.PropertyType即可。
p.DeclaringType--》T的类型

Jonny-Xhl | 园豆:664 (小虾三级) | 2020-11-25 17:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册