2016-11-16 2 views
0

У моего DGV есть предварительно отформатированные столбцы через конструктор. С SQL я мог бы загрузить результат SqlDataReader в DataTable и просто пропустить столбцы, чтобы установить там свойство DataPropertyName.Linq to DataGridView, AutoGenerateColumns = False отображает пустые строки

Я сейчас перехожу на LINQ; установка AutoGenerateColumns к False с:

Dim result = From a In db.states 
      Select a 

DataGridView1.DataSource = result 

... кажется, только отобразить пустую сетку (сохраняя при этом столбцы). Помогите? Я хочу, чтобы форматирование столбцов сетки выполнялось в дизайнере как можно больше. Благодарю.

UPDATE

Установка 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 
+1

'.ToList () 'должен работать. Являются ли столбцы 'DataPropertyName' именами имен объектов в вашей коллекции состояний? – Fabio

+0

Привет, Фабио, спасибо, см. Мои правки! :) – AwonDanag

+1

Если вы создали столбец в дизайнере, то вы можете также установить их в дизайнере. Если вы хотите динамический, тогда установите 'AutoGenerateColumns = true' – Fabio

ответ

0

Похоже, вы все еще нужно, чтобы преобразовать это в список как так:

Dim result = From a In db.states 
      Select a 

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

Это, к сожалению, не изменилось. :( – AwonDanag

+0

Хм. Странно. Я уверен, что это работает на меня, хотя. –

+0

Это winforms или WPF? –

0

Попробуйте добавить BindingSource:

Dim result = From a In db.states 
      Select a 

Dim bs = New BindingSource() 
bs.DataSource = result 
DataGridView1.DataSource = bs 
Смежные вопросы