我对使用bindingsources和datagridviews(以及VB .NET)进行编程是个新手,所以这是我的问题/问题。
我正在VB 2010中编写一个应用程序,用户将在后端更新SQL 2008 R2服务器中的数据(他们不会添加或删除任何记录,也不会更新所有字段)。设计模式中的表单具有绑定源,数据集和数据的各种文本框以及表单底部的数据网格视图。
当表单加载时,加载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 ...
With frmBindingSource
.DataMember = "test_table"
.DataSource = frmDataSet
End With
然后我将表单上的DataGridView绑定到BindingSource ...
frmDataGridView.DataSource = frmBindingSource
现在,在“test_table”数据库表中,某些字段是货币且未更新,请购买用户,因此我将其绑定如下...
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")
现在问题是......
用户使用DataGridView移动没有问题的记录。我们遇到麻烦的地方是“Total”字段可以是“Null”,如果用户点击“Total”字段中带有“Null”的记录,它就不会在字段的绑定文本框中消隐,只有在出现“非空”值时才会改变。
因此,如果用户开始并且前三个记录在“总计”字段中具有“空”,则该字段的文本框保持空白。如果第四个记录具有值,则该字段的文本框将更改为该值,但如果它们返回记录,则该字段的文本框中的值不会为空但保留该值并将保留该值直到找到了不同的“非空”值。
但是,如果我在绑定过程中删除这样的格式......
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total")
一切都很完美。
我在这里做错了什么,我忘记了什么简单的事情,我怎么能解决它,因为我真的希望在表格上正确地格式化。
答案 0 :(得分:0)
找到问题的答案...... (连续工作13个小时后,有助于睡眠)
如果我更好地阅读文档,我会知道在我的数据绑定行中更改“vbNull”...
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")
要成为vbNullString ......
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNullString, "c")
因此,当检测到DBNull时,它将默认为“空白”(即vbNullString),无需更改有效的SQL查询。