0

我对使用 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”值时才会更改。

因此,如果用户开始并且前三个记录在“总计”字段中有“空”,则该字段的文本框保持空白。如果第四条记录有值,则该字段的文本框将更改为该值,但如果他们返回记录,则该字段的文本框中的值不会为空,而是保留该值并将保留该值,直到找到不同的“非空”值。

但是,如果我像这样在绑定过程中删除格式......

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total")

一切都很完美。

我在这里做错了什么,我忽略了什么简单的事情忘记了,我该如何解决它,因为我真的很想在表格上正确格式化。

4

1 回答 1

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 查询。

于 2012-12-24T14:44:02.097 回答