如何使用List< Dynamic>与DataGridView.DataSource一样? [英] How can I use a List<Dynamic> as with DataGridView.DataSource?

查看:64
本文介绍了如何使用List< Dynamic>与DataGridView.DataSource一样?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 List< dynamic> 绑定到DataGridView DataSource属性.尽管编译时没有错误,但是也没有显示列.

I'm trying to bind a List<dynamic> to a DataGridView DataSource property. While there are no errors when compiling there are no columns being displayed either.

如果我预先创建了列,我将显示行,但是其中没有数据.

If I pre-create the column I get the rows to display, but there's no data in them.

简单地说,如何在我的DataGridView中正确使用 List< dynamic> 对象?

Simply put, how can I properly use a List<dynamic> object with my DataGridView?

推荐答案

如果我没记错的话,Dapper的动态查询将返回 ExpandoObject 的集合,该集合使您可以动态访问诸如 person之类的属性..Name ,但是基础对象实际上没有 Name 属性.它使用运行时绑定从内部键/值字典提取数据.由于 DataGridView 的默认数据绑定使用反射来获取对象的属性,因此无法找到查询返回的列.

If I remember correctly, Dapper's dynamic query returns a collection of ExpandoObjects that lets you dynamically access properties such as person.Name, but the underlying objects doesn't actually have a Name property. It uses run-time binding to extract the data from an internal key/value dictionary. Since the default data binding for DataGridView uses reflection to get the properties of the objects, it does not find the columns returned from the query.

因此,您有一些选择:

  • 将结果水化为具体类型,而不是 dynamic
  • 指定要显示在 DataGridView 中的列,而不使用默认绑定.
  • 使用类似于此答案的方法,将动态结果转换为 DataTable ..
  • li>
  • Hydrate the result as a concrete type instead of dynamic
  • Specify the columns you want to display in your DataGridView rather than using the default binding.
  • Convert the dynamic result to a DataTable using something similar to this answer.

这篇关于如何使用List&lt; Dynamic&gt;与DataGridView.DataSource一样?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆