2012-12-21 40 views
0

我有點新的與bindingsources和datagridviews編程(以及VB .NET),所以這裏是我的問題/問題的BindingSource。的WinForms文本框綁定貨幣格式和datagridview的不刷新正確

我編程在2010年VB應用程序中,用戶會在後端一個SQL 2008 R2服務器更新數據(它們不會被添加或刪除的任何記錄,而不是所有的領域將被更新)。設計模式中的表單具有綁定源,數據集和數據的各種文本框以及表單底部的datagridview。

當表單加載時,加載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」 DB表中的某些字段是貨幣,而不是更新的購買用戶,所以我將它們綁定如下...

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

現在,這裏的問題...

的用戶使用的DataGridView圍繞這正與沒有問題的記錄移動。我們遇到麻煩的地方在於「總計」字段可以是「空」,並且如果用戶在「總計」字段中擊中帶有「空」的記錄,它不會在該字段的綁定文本框中空白,它只會在有「非空值」時纔會改變。

因此,如果用戶在「總計」字段開始了與前三個記錄有一個「空」該字段的文本框保持空白。如果第四條記錄有一個值,則該字段的文本框將更改爲該值,但如果它們返回記錄,則該字段的文本框中的值不會空白,但會保留該值,並將保留該值直到找到不同的「非空值」。

但是,如果我喜歡這個結合過程中刪除格式...

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

一切都運行完美。

什麼我錯在這裏做什麼簡單的事情我是遠眺忘了,我怎麼能解決這個問題,因爲我真的很想得到這個正確格式化的形式。

+0

我沒有轉載這個,但聽起來像你可能需要利用Total_Amount變化事件來檢查空值或使用COALESCE函數編輯SQL查詢,因此數據源中沒有值爲null,它們都是'COALESCE (someColumn,0)' –

+0

謝謝,我正在考慮這個問題,但是在我去之前修改了SQL代碼,我想確保我沒有做錯或失蹤的事情。 – ByerRA

回答

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") 

所以它會默認爲 」空白「(即vbNullString)時一個DBNull被檢測到,不需要改變我的SQL查詢的工作。