VB.NET - добавление столбцов в DataGridView в список

У меня есть программа, где я позволяю пользователю динамически добавлять DataGridViews в интерфейс, которые также добавляются в список для удобного управления. Все DataGridView имеют свои собственные источники данных. Я использую источник привязки данных для добавления разных DataGridViewTextBoxColumns.

Проблема заключается в следующем: когда пользователь добавляет первую таблицу, выполняется следующий код:

dataGridList(dataGridList.Count -1).Clear()
dataGridList(dataGridList.Count -1).Add(NameDataGridViewTextBoxColumn)

Нет проблем, и отображаются правильные данные, но когда пользователь добавляет вторую таблицу, я получаю исключение:

"Предоставленная колонка уже относится к представлению datagrid"

Я думаю, это странно, так как я напрямую обращаюсь к другому DataGridView?

Суть всего в том, чтобы иметь возможность просматривать разные столбцы во всех DataGridView в зависимости от выбора пользователей.

Надеюсь, ты поможешь мне.

3 ответа

Как вы определяете, что такое NameDataGridViewTextBoxColumn? Я имею в виду, как создается ваш список textBoxColumns, который вы упомянули?

Вероятно, вам действительно нужно создать новый DataGridViewTextBoxColumn для добавления с соответствующими наборами свойств.

Вы можете добавить столбец в код примерно так:

Dim col As New DataGridViewTextBoxColumn col.DataPropertyName = "PropertyName" col.HeaderText = "SomeText" col.Name = "colWhateverName" DataGridView1.Columns.Add(col)

Обязательно укажите соответствующее имя свойства и т.д. Вы также можете скопировать его из существующего столбца...

col.DataPropertyName = NameDataGridViewTextBoxColumn.DataPropertyName

Например.


Вот что я сделал. Я выбираю столбец через мой поиск в БД или таблицу, а затем помещаю их в один DGV. Как это. Я просто играл с ним, и теперь он работает, чтобы правильно выровнять строки. Это немного не по теме, поскольку это БД, но я предполагаю, что подобные методы упростят добавление данных из других источников.

tempAdt = New OleDbDataAdapter("SELECT firstName FROM Employees",connector)
tableCommand = New OleDbCommandBuilder(tempAdt)
tableAdaptor = New OleDbDataAdapter("SELECT * FROM userTable", connector)
tableCommand = New OleDbCommandBuilder(tableAdaptor)
Dim startTable2 As New DataTable
tempAdt.Fill(startTable2)
tableAdaptor.Fill(startTable2)

В основном я использовал два разных адаптера, и он будет перечислять их бок о бок в DGV


Как и выше, вам нужен новый экземпляр для каждого вида сетки и назначить столбцы новому gridview, который вы можете сделать при обратной передаче.

licensed under cc by-sa 3.0 with attribution.