我对使用 BindingSources 和 DataNavigators(以及 VB .NET)进行编程有点陌生,所以这是我的问题/问题。
我正在用 VB 2010 编写一个应用程序,用户将在其中更新后端 SQL 2008 R2 服务器中的数据。设计模式下的表单在表单底部有一个 BindingSource、DataSet 以及用于数据和复选框的各种文本框和一个 DataNavigator。
当表单加载时,会加载 DataAdapter,然后加载数据集。(省略连接代码,“text_table”是SQL server中的一个测试表。
frmDataAdapter = New SqlClient.SqlDataAdapter(SQL_Query, frmConnection)
frmConnection.Open()
frmDataAdapter.FillSchema(frmDataSet, SchemaType.Source, "test_table")
frmDataAdapter.Fill(frmDataSet, "test_table")
我将 BindingSource 绑定到 DataSet 和 DataNavigator ...
With frmBindingSource
.DataMember = "test_table"
.DataSource = frmDataSet
End With
frmBindingNavigator.BindingSource = frmBindingSource
我将文本框和复选框绑定到 BindingSource ...
With Me
.Date_Logged.DataBindings.Add("Text",frmBindingSource, "DateLogged", True, DataSourceUpdateMode.OnValidation, vbNullString, "MM/dd/yyyy")
.Prepared_By.DataBindings.Add("Text", frmBindingSource, "PreparedBy", False, DataSourceUpdateMode.OnValidation, vbNullString)
.Issue_Placement.DataBindings.Add("Text", frmBindingSource, "IssuePlacement", False, DataSourceUpdateMode.OnValidation, vbNullString)
.Completed.DataBindings.Add("Checked", frmBindingSource, "Completed", False, DataSourceUpdateMode.OnValidation, False)
End With
问题是,虽然“已完成”复选框绑定到“frmBindingSource”,但如果我按下 BindingNavigator 上的添加记录按钮,所有其他控件(文本框)都不会清除,因此用户可以输入新数据,但是随着 DataNavigator 中的计数增加,确实会创建一条新记录。(那时我通常会阻止程序实际将任何内容保存到表中。)
如果我删除“已完成”复选框的绑定,然后再试一次,当我按下添加记录按钮时,其他文本框会按应有的方式清除。将“已完成”复选框绑定放回原处,它就会停止工作。
SQL 服务器中的“已完成”字段是“位”,默认值为“0”,因此所有数据都有有效条目,“已完成”字段中没有任何内容为 NULL。我试过以各种方式绑定“已完成”复选框,但总是遇到同样的问题。
目前没有验证代码或任何其他真实事件,因为这是在项目开始时,但这有点烦人,因为我需要使用复选框。
有人知道我在这里做错了什么吗?