Преамбула: Я долго не работал с WinForms, а также никогда ранее в VB. Я пытаюсь добавить DataGridView
в приложение, написанное на VB, которое будет отображать сетку данных изDataTable
.
Я следовал документации здесь , здесь и здесь и в простом тестовом примере у меня есть код
Public Class Form1
Private count As Integer
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
count = count + 1
Dim table As DataTable = BindingSource2.DataSource
Dim row As DataRow
row = table.NewRow()
row("Col1") = "foo" + count.ToString()
row("Col2") = "bar" + count.ToString()
table.Rows.Add(row) 'throws System.InvalidOperationException here
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'BindingSource2.DataSource = New DataTable()
'Dim table As DataTable = BindingSource2.DataSource
Dim table As New DataTable
Dim column1 As DataColumn = New DataColumn()
column1.ColumnName = "Col1"
column1.Caption = column1.ColumnName
column1.DataType = System.Type.GetType("System.String")
table.Columns.Add(column1)
Dim column2 As DataColumn = New DataColumn()
column2.ColumnName = "Col2"
column2.Caption = column2.ColumnName
column2.DataType = System.Type.GetType("System.String")
table.Columns.Add(column2)
'Dim keys(0) As DataColumn
'keys(0) = column1
'table.PrimaryKey = keys
' first row
Dim row As DataRow = table.NewRow()
row("Col1") = "beep"
row("Col2") = "boop"
table.Rows.Add(row)
BindingSource2.DataSource = table
End Sub
End Class
Код проходит через Form1_Load
хорошо, но добавленные записи не отображаются в DataGridView
.Затем, когда вызывается Timer1_Tick
, выдается исключение System.InvalidOperationException
в строке, указанной выше.Я не вижу, что я делаю неправильно, основываясь на примерах, приведенных в документации.
Вопрос: Может кто-нибудь помочь, пожалуйста, с (а) почему DataGridView
не отражает добавленноеданные в конце Form1_Load
и (b) почему добавление строки вызывает исключение?
Ps Я проверил отладку и в table.Rows.Add(row)
table
содержитсяправильная информация, как и row
.
Редактировать: BindingSource был добавлен и подключен к DataGridView с помощью конструктора, поэтому вместо него код отображается в From1.Designer.vbЯ не показывал здесь.