【发布时间】:2012-12-21 04:31:08
【问题描述】:
我对使用 bindingsources 和 datagridviews(以及 VB .NET)进行编程有点陌生,所以这是我的问题/问题。
我正在 VB 2010 中编写一个应用程序,用户将在其中更新后端 SQL 2008 R2 服务器中的数据(他们不会添加或删除任何记录,也不会更新所有字段)。设计模式下的表单有一个绑定源、数据集和用于数据的各种文本框以及表单底部的数据网格视图。
当表单加载时,会加载 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...
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 来移动记录,这没有问题。我们遇到麻烦的地方是“总计”字段可以为“空”,如果用户在“总计”字段中点击“空”的记录,它不会在该字段的绑定文本框中空白,仅当存在“非 Null”值时才会更改。
因此,如果用户开始并且前三个记录在“总计”字段中有“空”,则该字段的文本框保持空白。如果第四条记录有值,则该字段的文本框将更改为该值,但如果他们返回一条记录,则该字段的文本框中的值不会为空,而是保留该值并将保留该值,直到找到不同的“非 Null”值。
但是,如果我像这样在绑定过程中删除格式...
Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total")
一切都很完美。
我在这里做错了什么,我忽略了什么简单的事情忘记了,我该如何解决它,因为我真的很想在表单上正确格式化。
【问题讨论】:
-
我没有复制这个,但听起来你可能需要利用 Total_Amount 更改事件来检查空值或使用 COALESCE 函数编辑 SQL 查询,因此数据源中的值不为空,他们都是
COALESCE(someColumn,0) -
谢谢,我正在考虑这个问题,但在我去修改 SQL 代码之前,我想确保我没有做错或遗漏什么。
标签: vb.net winforms bindingsource