Winform带有文本和复选框绑定到bindingsource与datanavigator添加记录问题

时间:2013-01-04 20:10:18

标签: vb.net winforms checkbox bindingsource

我对使用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。我已尝试以各种方式绑定“已完成”复选框,并始终存在相同的问题。

目前没有验证码或任何其他真实事件,因为这是在项目的开始,但它有点烦人,因为我需要使用复选框。

任何人都有任何想法我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

在整个周末花费了这笔费用之后,我有了解决方案。

我在测试期间能够确定的是,如果您使用带有BindingNavigator复选框的表单,BindingNavigator希望看到复选框的“CheckState”而不仅仅是“Check”状态

这里的问题是,如果你绑定到“CheckState”并且你的字段是布尔值,你将得到一个错误,所以你必须将格式标志翻转为“True”并将“nullValue”设置为“CheckState.Unchecked ”

所以我的复选框绑定现在是..

Me.Completed.DataBindings.Add("CheckState", frmBindingSource, "Completed", True, DataSourceUpdateMode.OnValidation, CheckState.Unchecked)

使用上述方法解决了这个问题。