如何像使用 DataGridView.DataSource 一样使用 List<Dynamic>?

How can I use a List<Dynamic> as with DataGridView.DataSource?

我正在尝试将 List<dynamic> 绑定到 DataGridView 数据源 属性。虽然编译时没有错误,但也没有显示任何列。

如果我预先创建了列,我得到了要显示的行,但其中没有数据。

简而言之,如何将 List<dynamic> 对象与我的 DataGridView 正确使用?

如果我没记错的话,Dapper 的动态查询 returns 一个 ExpandoObject 的集合,可以让你动态访问 person.Name 等属性,但底层对象实际上并没有一个 Name 属性。它使用 运行 时间绑定从内部 key/value 字典中提取数据。由于 DataGridView 的默认数据绑定使用反射来获取对象的属性,因此它找不到从查询返回的列。

所以你有几个选择:

  • 将结果混合为具体类型而不是 dynamic
  • 指定要在 DataGridView 中显示的列,而不是使用默认绑定。
  • 使用类似于 this answer.
  • 的方式将动态结果转换为 DataTable