У меня ошибка Не удается привязать к свойству или столбцу, пожалуйста, решение. Для заметок использую Studio Visuals 2010. Есть ли лучшее решение или рекомендация?
спасибо Джек
Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim cn As String = "provider=Microsoft.Jet.OLEDB.4.0; data source = " & Path & "; Extended Properties=dBase IV"
Dim WithEvents bmb As BindingManagerBase
Dim dsTest As New DataSet
Private Sub CreateDataSetfillgridview()
Try
Dim query As String = "select EMPLOYEEN,HIREDATE FROM TRIAL"
Using con As OleDbConnection = New OleDbConnection(cn)
Using cmd As OleDbCommand = New OleDbCommand(CStr(query), con)
Using da As New OleDbDataAdapter(cmd)
Dim dt As DataTable = New DataTable()
da.Fill(dt)
dsTest.Tables.Add(dt)
End Using
End Using
End Using
'Bind controls
DataGrid1.DataSource = dsTest
'if I comment the code below then a dataset appears as screenshot below
Me.TextBox1.DataBindings.Add("Text", dsTest, "EMPLOYEEN")
Dim MyBinding As New Binding("Value", dsTest, "HIREDATE")
AddHandler MyBinding.Format, AddressOf dtFormatter
AddHandler MyBinding.Parse, AddressOf dtParser
DateTimePicker1.DataBindings.Add(MyBinding)
'Force a Refresh of bound controls
bmb = Me.BindingContext(dsTest, "TRIAL")
bmb.Position = bmb.Count
bmb.Position = 0
Catch myerror As OleDbException
MessageBox.Show("Error: " & myerror.Message)
Finally
End Try
End Sub
@ user18387401, так что решение
Я указал, что вы не заполняете DataTable
, который вы связываете. Решение очевидно. Может быть, взгляните на свой код и поймите, почему вы не делаете то, что, очевидно, намеревались сделать.
da.Fill(dt)
-> da.Fill(ds.Tables("TRIAL"))
Visual Studio может сделать всю вашу жизнь намного проще в этом отношении. Добавьте новый тип файла DataSet, откройте проводник сервера, добавьте соединение с вашей базой данных доступа, разверните его и перетащите узлы из проводника сервера в набор данных, затем перейдите в форму, откройте окно источников данных и перетащите узлы набора данных на форму. VS с помощью этих двух операций перетаскивания напишет весь тот код, который вы там написали, и многое другое, и он будет работать с первого раза.
@CaiusJard, я использовал ваш код, есть ошибка «Значение не может быть нулевым. Имя параметра dataTable». Я обновил ваш почтовый индекс и использую базу данных dbf
Вы звонили dsTest.Tables.Add("TRIAL")
, когда создавали свой набор данных?
Также включите Option Strict/Explicit. Вы оставили Me.DataGrid1.DataSource = dt
бездельничать в своем коде, но dt
нигде не определен, поэтому тот факт, что он вообще работает, указывает мне на то, что ваш VB, вероятно, все еще работает в режиме «закинуть всю старую хрень и ждать ошибок во время выполнения»
@CaiusJard, если я прокомментирую код ниже, то появится набор данных, как на снимке экрана ниже, который я отметил в своем коде, тогда набор данных появится в представлении сетки. Почему gridview не загружает строку автоматически, и если я раскомментирую код, все равно появится ошибка «Невозможно привязать к свойству или столбцу EMPLOYEEN в источнике данных».
Вы не можете установить DataSource элемента управления как DataSet, если вы также не установите свойство DataMember. Набор данных — это набор таблиц, DataMember указывает, какая таблица. Либо установите DataSource на DataTable, либо установите DataSource на DataSet и установите DataMember на имя таблицы в наборе.
Вам не кажется, что это невероятно тяжелая работа? Создайте новый проект (чтобы не мешать существующему коду), подключите проводник сервера к файлу базы данных, поместите файл нового типа набора данных, перетащите таблицы из проводника сервера в набор данных, затем откройте окно «Источники данных» и перетащите узлы из набора данных на форму. Весь этот код будет написан для вас
@CaiusJard, спасибо за ваше руководство, так что мне удалось это сделать.
Это все благодаря гайду от @CaiusJard
Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
Dim cn As String = "provider=Microsoft.Jet.OLEDB.4.0; data source = " & Path & "; Extended Properties=dBase IV"
Dim WithEvents bmb As BindingManagerBase
Dim dsTest As New DataSet
Private Sub CreateDataSetfillgridview()
Try
Dim query As String = "select EMPLOYEEN,HIREDATE FROM TRIAL"
Using con As OleDbConnection = New OleDbConnection(cn)
Using cmd As OleDbCommand = New OleDbCommand(CStr(query), con)
Using da As New OleDbDataAdapter(cmd)
Dim dt As DataTable = New DataTable("TRIAL")
da.Fill(dt)
dsTest.Tables.Add(dt)
End Using
End Using
End Using
'Bind controls
DataGrid1.DataSource = dsTest.Tables("TRIAL")
Me.TextBox1.DataBindings.Add("Text", dsTest, "TRIAL.EMPLOYEEN")
Dim MyBinding As New Binding("Value", dsTest, "TRIAL.HIREDATE")
AddHandler MyBinding.Format, AddressOf dtFormatter
AddHandler MyBinding.Parse, AddressOf dtParser
DateTimePicker1.DataBindings.Add(MyBinding)
'Force a Refresh of bound controls
bmb = Me.BindingContext(dsTest, "TRIAL")
bmb.Position = bmb.Count
bmb.Position = 0
Catch myerror As OleDbException
MessageBox.Show("Error: " & myerror.Message)
Finally
End Try
End Sub
Конечно не может связать. Когда вы заселили
dsTest.Tables("TRIAL")
? Нигде, что вы нам показали.