我对使用BindingSources和DataNavigators(以及VB .NET)进行编程有点新手,所以这是我的问题/问题。
我正在使用VB 2010编写一个应用程序,用户将在后端更新SQL 2008 R2服务器中的数据。设计模式中的表单有一个BindingSource,DataSet和数据和复选框的各种文本框以及表单底部的DataNavigator。
当表单加载时,加载DataAdapter然后加载数据集。 (省略连接的代码,“text_table”是SQL服务器中的测试表。
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。我已尝试以各种方式绑定“已完成”复选框,并始终存在相同的问题。
目前没有验证码或任何其他真实事件,因为这是在项目的开始,但它有点烦人,因为我需要使用复选框。
任何人都有任何想法我在这里做错了吗?
答案 0 :(得分:0)
在整个周末花费了这笔费用之后,我有了解决方案。
我在测试期间能够确定的是,如果您使用带有BindingNavigator复选框的表单,BindingNavigator希望看到复选框的“CheckState”而不仅仅是“Check”状态
这里的问题是,如果你绑定到“CheckState”并且你的字段是布尔值,你将得到一个错误,所以你必须将格式标志翻转为“True”并将“nullValue”设置为“CheckState.Unchecked ”
所以我的复选框绑定现在是..
Me.Completed.DataBindings.Add("CheckState", frmBindingSource, "Completed", True, DataSourceUpdateMode.OnValidation, CheckState.Unchecked)
使用上述方法解决了这个问题。