2017-01-04 5 views
1

У меня есть datagridview, связанный с List(of T).DataGridView привязан к списку (из T) изменить тип столбца

Private BodyComponents As New List(Of BodyComponent) 
Private BodyBinding As BindingSource 


Public Sub New() 

    ' This call is required by the designer. 
    InitializeComponent() 


    ' Set the bindingsource 
    BodyBinding = New BindingSource(BodyComponents, Nothing) 

    ' Add any initialization after the InitializeComponent() call. 
    dgvBodyOverview.DataSource = BodyBinding 

    .... 

Все элементы в списке представляют собой объект с несколькими свойствами, один из них является материал As String. У меня есть большой список доступных материалов, в которых пользователь должен иметь возможность выбирать. Как я могу сделать это доступным в раскрывающемся списке datagridview?

Информация: Материалы считываются во время выполнения, когда диалог открыт, а не жестко закодирован.

ответ

1

Вы не можете изменить типы столбцов, поэтому после того, как столбцы созданы заменить Material один с новым DataGridViewComboBoxColumn вы создали:

dgv1.DataSource = ... 

Dim cbo = New DataGridViewComboBoxColumn() 
Dim oldCol = dgv1.Columns("Material") 
' copy or set prop values 
cbo.HeaderText = oldCol.HeaderText 
cbo.Name = oldCol.Name 
cbo.DataSource = MaterialsList 
cbo.DataPropertyName = "Material" 

' replace the column 
dgv1.Columns.Remove(oldCol) 
dgv1.Columns.Add(cbo) 
' cant set the Display Index until it is in the DGV 
cbo.DisplayIndex = oldCol.DisplayIndex 

В тех случаях, когда вам нужно столбец для отображения одного но сохраните что-то вроде Id в DGV DataSource, вы сделали бы это через колонку DataSource.

Используйте либо результат DataTable запрос, который содержит Id и текст, который вы хотите показать, или просто List эти пары имя-значение:

cbo.DataSource = Materials    ' == a DT or List of Name-Id 
cbo.DisplayName = "MaterialName"  ' col or prop name to show 
cbo.ValueMember = "Id"     ' value to save 

Тип данных ValueMember должен соответствовать, что колонки он отображается в источнике данных (cbo.DataPropertyName)

+0

Что лучше всего использовать, если нет требуемого альтернативного 'Id'? Строка должна отображаться и сохраняться. –

+0

То, что верхняя часть - над HR делает - устанавливает MaterialList как DataSource - при условии, что это простой 'List (of String)' - вы не много говорили о том, что это такое – Plutonix

+0

Строковый массив или List будет работать – Plutonix

Смежные вопросы