Как добавить записи в DataGridView в VB.Net?
Как добавить новую запись в элемент управления DataGridView в VB.Net?
Я не использую привязку данных или привязки к базам данных. У меня небольшая форма с тремя полями, и когда пользователь нажимает "ОК", они должны быть добавлены в элемент управления DataGridView в виде новой строки.
Ответы
Ответ 1
Если вы хотите добавить строку в конец сетки, используйте метод Добавить() коллекции строк...
DataGridView1.Rows.Add(New String(){Value1, Value2, Value3})
Если вы хотите вставить строку в частичную позицию, используйте метод Вставить() коллекции строк (как также сказал GWLlosa)...
DataGridView1.Rows.Insert(rowPosition, New String(){value1, value2, value3})
Я знаю, что вы упомянули, что не выполняете привязку данных, но если бы вы определили строго типизированный набор данных с одним datatable в своем проекте, вы могли бы использовать это и получить некоторые хорошо типизированные методы для этого, а не полагаться на методы сетки...
DataSet1.DataTable.AddRow(1, "John Doe", true)
Ответ 2
Я думаю, вы должны создать набор данных /datatable в коде и привязать к нему сетку.
Ответ 3
Когда я пытаюсь использовать источник данных из datagridview, который использовал bindingsource, его ошибка accor не может быть выполнена:
---------- Решение ------------
'Я изменил кастинг из bindingsource, который связывается с datagridview
'Код здесь
Dim dtdata As New DataTable()
dtdata = CType(bndsData.DataSource, DataTable)
Ответ 4
Функция, которую вы ищете, это "Вставить". Он принимает в качестве параметров индекс, который вы хотите вставить, и массив значений для использования для новых значений строк. Типичное использование может включать:
myDataGridView.Rows.Insert(4,new object[]{value1,value2,value3});
или что-то в этом роде.
Ответ 5
Если ваш DataGridView
привязан к DataSet
, вы не можете просто добавить новую строку на свой экран DataGridView
. Теперь он будет работать правильно.
Вместо этого вы должны добавить новую строку в DataSet
с помощью этого кода:
BindingSource[Name].AddNew()
Этот код также автоматически добавит новую строку на ваш DataGridView
дисплей.
Ответ 6
Если вы хотите использовать что-то более описательное, чем немой массив, не прибегая к использованию DataSet, то следующее может оказаться полезным. Он по-прежнему не является строго типизированным, но, по крайней мере, он проверяется компилятором и будет обрабатывать реорганизацию достаточно хорошо.
Dim previousAllowUserToAddRows = dgvHistoricalInfo.AllowUserToAddRows
dgvHistoricalInfo.AllowUserToAddRows = True
Dim newTimeRecord As DataGridViewRow = dgvHistoricalInfo.Rows(dgvHistoricalInfo.NewRowIndex).Clone
With record
newTimeRecord.Cells(dgvcDate.Index).Value = .Date
newTimeRecord.Cells(dgvcHours.Index).Value = .Hours
newTimeRecord.Cells(dgvcRemarks.Index).Value = .Remarks
End With
dgvHistoricalInfo.Rows.Add(newTimeRecord)
dgvHistoricalInfo.AllowUserToAddRows = previousAllowUserToAddRows
Следует отметить, что пользователь должен иметь разрешение AllowUserToAddRows
, иначе это не сработает. Вот почему я храню существующее значение, устанавливаю его в true, выполняю свою работу, а затем reset как это было.