Vb.net 绑定到bindingsource的Winforms文本框的货币格式和datagridview未正确刷新

Vb.net 绑定到bindingsource的Winforms文本框的货币格式和datagridview未正确刷新,vb.net,winforms,bindingsource,Vb.net,Winforms,Bindingsource,我对使用bindingsources和DataGridView(以及VB.NET)编程有点陌生,所以这里是我的问题 我正在用VB 2010编写一个应用程序,其中用户将更新后端SQL 2008 R2服务器中的数据(他们不会添加或删除任何记录,也不会更新所有字段)。设计模式下的表单具有bindingsource、dataset和用于数据的各种文本框,以及表单底部的datagridview 表单加载时,将加载DataAdapter,然后加载数据集。 (省略了连接代码,“text_table”是SQL

我对使用bindingsources和DataGridView(以及VB.NET)编程有点陌生,所以这里是我的问题

我正在用VB 2010编写一个应用程序,其中用户将更新后端SQL 2008 R2服务器中的数据(他们不会添加或删除任何记录,也不会更新所有字段)。设计模式下的表单具有bindingsource、dataset和用于数据的各种文本框,以及表单底部的datagridview

表单加载时,将加载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绑定到数据集

With frmBindingSource
    .DataMember = "test_table"
    .DataSource = frmDataSet
End With
然后我将表单上的DataGridView绑定到BindingSource

frmDataGridView.DataSource = frmBindingSource
现在,在“test_table”DB表中,一些字段是通用的,用户不需要更新,所以我将它们绑定如下

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")
现在问题来了

用户使用DataGridView在没有问题的记录中移动。我们遇到的问题是“总计”字段可能是“空”的,如果用户在“总计”字段中点击一个带有“空”的记录,它不会在字段的绑定文本框中空白,它只会在有“非空”值时更改

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

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

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total")
一切都很完美


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

找到了问题的答案。。。 (连续工作13小时后有助于睡眠)

如果我仔细阅读文档,我就会知道在数据绑定行中更改“vbNull”

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNull, "c")
仅仅是一个字符串

Me.Total_Amount.DataBindings.Add("Text", frmBindingSource, "Total", True, DataSourceUpdateMode.Never, vbNullString, "c")

因此,它将默认为“空白”(即vbNullString)当检测到DBNull时,无需更改我的SQL查询,因为它可以正常工作。

我没有重复此操作,但听起来您可能需要点击Total_Amount change事件来检查null或使用COALESCE函数编辑SQL查询,以便数据源中没有值为null,它们都是
COALESCE(someColumn,0)
谢谢,我一直在考虑这个问题,但在我修改SQL代码之前,我想确保我没有做错或遗漏什么。