vb.net bindingSource 和 bindingNavigation 以编程方式
Posted
技术标签:
【中文标题】vb.net bindingSource 和 bindingNavigation 以编程方式【英文标题】:vb.net bindingSource and bindingNavigation programmatically 【发布时间】:2013-11-13 09:01:13 【问题描述】:请看下面的代码并告诉我为什么它没有移动到下一条记录?我以编程方式加载数据并在数据集中填写表格。我可以通过向导做到这一点,但我想用我自己的代码做到这一点;因为使用向导有时无助于理解其背后的真实代码。
Private Sub frmSystemOptions_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
dsOptions = New DataSet
loadOptions()
bsInstitute = New BindingSource(dsOptions, "institute")
bnInstitute = New BindingNavigator(bsInstitute)
InstIdTextBox.DataBindings.Add("Text", dsOptions.Tables("institute"),"instId")
CodeTextBox.DataBindings.Add("Text", dsOptions.Tables("institute"), "code")
NameTextBox.DataBindings.Add("Text", dsOptions.Tables("institute"), "name")
TypeTextBox.DataBindings.Add("Text", dsOptions.Tables("institute"), "type")
Catch ex As Exception
MsgBox(Err.Description)
End Try
End Sub
Sub loadOptions()
Dim sql As String
Try
sqlConn = New SqlConnection(connString)
sqlConn.Open()
sql = "select * from institute"
daAdapter = New SqlDataAdapter(sql, sqlConn)
daAdapter.Fill(dsOptions, "institute")
'----------------------------------------------------------------------
sqlConn.Close()
Catch ex As Exception
sqlConn.Close()
MsgBox(Err.Description)
End Try
End Sub
Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
If bsInstitute.Position + 1 < bsInstitute.Count Then
bsInstitute.MoveNext()
Else
bsInstitute.MoveFirst()
End If
Me.Validate()
End Sub
【问题讨论】:
也许你的 DataBinding 是错误的。您移动了 BindingSource,但您已绑定到 DataSet。处理事件 bsInstitue_CurrentChanged (或类似的东西)并放入断点。你会看到它在移动。 我找到了解决方案。数据绑定应如下所示: InstIdTextBox.DataBindings.Add("Text", bsInstitute, "instId") CodeTextBox.DataBindings.Add("Text", bsInstitute, "code") NameTextBox.DataBindings.Add("Text", bsInstitute, "name") TypeTextBox.DataBindings.Add("Text", bsInstitute, "type") 在我的代码中,我使用的是数据集而不是 bsInstitute。但现在它完美了 【参考方案1】:我找到了解决方案。数据绑定应如下所示:
InstIdTextBox.DataBindings.Add("Text", bsInstitute, "instId") CodeTextBox.DataBindings.Add("Text", bsInstitute, "code") NameTextBox.DataBindings.Add("Text", bsInstitute, "name") TypeTextBox.DataBindings.Add("Text", bsInstitute, "type")
dataset instead of bsInstitute. But now its perfect. Try
dsOptions = New DataSet
loadOptions()
bsInstitute = New BindingSource(dsOptions, "institute")
InstIdTextBox.DataBindings.Add("Text", bsInstitute, "instId")
CodeTextBox.DataBindings.Add("Text", bsInstitute, "code")
NameTextBox.DataBindings.Add("Text", bsInstitute, "name")
TypeTextBox.DataBindings.Add("Text", bsInstitute, "type")
Catch ex As Exception
MsgBox(Err.Description)
End Try
我正在使用数据集进行这样的绑定
InstIdTextBox.DataBindings.Add("Text", dsOptions.Tables("institute"),"instId")
但是我应该将上面代码行中的 dsOptions.tables("institute") 替换为我创建的 bindingSource,如下所示
InstIdTextBox.DataBindings.Add("Text", bsInstitute, "instId")
这样我可以使用 bindingSource 对象来导航我的数据集中的记录。
【讨论】:
以上是关于vb.net bindingSource 和 bindingNavigation 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章