【问题标题】:Linq to DataGridView, AutoGenerateColumns = False displays blank rowsLinq to DataGridView, AutoGenerateColumns = False 显示空白行
【发布时间】:2016-11-16 07:23:33
【问题描述】:

我的 DGV 具有通过设计器预先格式化的列。使用 SQL,我可以将 SqlDataReader 结果加载到 DataTable 并简单地遍历列以在其中设置 DataPropertyName 属性。

我现在正在迁移到 LINQ;将AutoGenerateColumns 设置为False

Dim result = From a In db.states
             Select a

DataGridView1.DataSource = result

...似乎只显示一个空白网格(同时保留列)。帮助?我希望尽可能在设计器处完成网格列的格式化。谢谢。

更新

一一设置DataPropertyName似乎有效:

col1.DataPropertyName = "id"
col2.DataPropertyName = "name"

有没有办法将其转换为例程,可能带有循环,所以我不必手动设置所有内容?有点像这样(DataTable):

For i = 0 To dt.Columns.Count - 1 : List.Columns(i).DataPropertyName = dt.Columns(i).ColumnName : Next

【问题讨论】:

  • .ToList() 必须工作。 DataPropertyName 列的名称是否与您的 states 集合中的属性名称相同?
  • 嗨法比奥,谢谢,请看我的编辑! :)
  • 如果您在设计器中创建了列 - 那么您也可以在设计器中设置它们。如果你想要动态然后设置AutoGenerateColumns = true

标签: c# vb.net linq datagridview


【解决方案1】:

似乎您仍然需要将其转换为这样的列表:

Dim result = From a In db.states
             Select a

DataGridView1.DataSource = result.ToList() 'converts to list

【讨论】:

  • 不幸的是,这并没有什么不同。 :(
  • 嗯。奇怪的。不过,我很确定这对我有用。
  • 这是winforms还是WPF?
  • Winforms。我的结果返回了正确的行数(来自数据库),尽管它们是空白的......我认为这与 DataPropertyName 属性有关?
  • 我认为这是因为您正在使用向导来预格式化您的数据网格。您是否尝试过在不配置数据网格的情况下直接将结果加载到数据源中?
【解决方案2】:

尝试添加 BindingSource:

Dim result = From a In db.states
             Select a

Dim bs = New BindingSource()
bs.DataSource = result
DataGridView1.DataSource = bs

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多