【问题标题】:Winforms Textbox bound to bindingsource with currency format and datagridview not refreshing properlyWinforms Textbox 绑定到具有货币格式的 bindingsource 和 datagridview 未正确刷新
【发布时间】: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


【解决方案1】:

找到问题的答案... (有助于在连续工作 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 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-04
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多