DataGridComboBoxCell - не может заполнить значения программно - PullRequest
0 голосов
/ 16 марта 2019

Я заполняю DataGridView двумя столбцами, DataGridViewTextBoxColumn для метки имени и DataGridViewComboBoxColumn в качестве выпадающего списка для выбора имени столбца SQL для сопоставления с именем.

Я собираюсь пройтись по моим именам и создать строку для каждого из них.В каждой строке должно отображаться имя поля (String объект), а в другом столбце должно быть поле со списком (значения находятся в пределах List (Of String)).Я продолжаю получать исключение, которое говорит, что «значение недопустимо»:

For Each sourceColumn As String In sourceColumnList
    Dim item As New DataGridViewTextBoxCell
    Dim destcombo As New DataGridViewComboBoxCell
    item.Value = sourceColumn
    destcombo.Items.AddRange(sqlColumnSelectionList.ToArray())

    '    ERROR IS HERE, REFERRING TO INVALID COMBO BOX |
    '                                                 \|/
    list_Destination_SQLMap.Rows.Add(sourceColumn, destcombo)
Next

Я погуглил, но могу найти только примеры того, как решить эту проблему с источниками данных, которые связаны, а не связаны,Я знаю, что что-то упустил, это первый раз, когда я использовал DataGridView.Пожалуйста, помогите мне!Заранее спасибо.

1 Ответ

0 голосов
/ 17 марта 2019

При добавлении DataGridViewComboBoxColumn вам также необходимо установить его свойство DataSource в качестве допустимого источника.A DataTable если вы получаете данные из базы данных или List (Of T) - ваш List (Of String) будет работать нормально.

Добавьте код ниже ПОСЛЕ того, как вы создали и заполнили sqlColumnSelectionList.(Не забудьте изменить имя переменной column2 на имя, которое вы назвали)

column2.DataSource = sqlColumnSelectionList

Важно помнить, что DataGridViewComboBox работает так же, как обычный ComboBox, когда дело доходит доинициализация и общее использование.

Как только вы это сделаете, при добавлении строк вы должны изменить эту строку:

list_Destination_SQLMap.Rows.Add(sourceColumn, destcombo)

на:

list_Destination_SQLMap.Rows.Add(sourceColumn, "")

Это добавитновая строка в DataGridView с записью в столбце «Текст», соответствующей названию поля (согласно вашему описанию), а второй столбец будет пустым, что позволит пользователю выбрать значение из раскрывающегося списка.

Если вам необходимо предварительно выбрать второй столбец для значения, замените пустую строку этим значением.

DataGridViewComboBoxColumn необходимо заполнять только один раз, а не каждый раз, когда новая ячейка добавляется вDataGridView.

...