2013-01-04 48 views
0

我有點新的與BindingSources和DataNavigators(以及VB.NET)編程,所以這裏是我的問題/問題。Winform的文本和複選框綁定到bindingsource與datanavigator添加記錄問題

我在VB 2010中編寫一個應用程序,用戶將在後臺更新SQL 2008 R2服務器中的數據。設計模式下的表單具有BindingSource,DataSet和數據和複選框的各種文本框以及表單底部的DataNavigator。

當表單加載時,加載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併到DataNavigator ...

With frmBindingSource 
    .DataMember = "test_table" 
    .DataSource = frmDataSet 
End With 
frmBindingNavigator.BindingSource = frmBindingSource 

我綁定文本框和複選框到BindingSource ...

With Me 
    .Date_Logged.DataBindings.Add("Text",frmBindingSource, "DateLogged", True, DataSourceUpdateMode.OnValidation, vbNullString, "MM/dd/yyyy") 
    .Prepared_By.DataBindings.Add("Text", frmBindingSource, "PreparedBy", False, DataSourceUpdateMode.OnValidation, vbNullString) 
    .Issue_Placement.DataBindings.Add("Text", frmBindingSource, "IssuePlacement", False, DataSourceUpdateMode.OnValidation, vbNullString) 
    .Completed.DataBindings.Add("Checked", frmBindingSource, "Completed", False, DataSourceUpdateMode.OnValidation, False) 
End With 

的問題是,雖然「已完成」複選框被綁定到「frmBindingSource」,如果我按在BindingNavigato添加記錄按鈕所有其他控件(文本框)都不清除,以便用戶可以輸入新數據,但是隨着DataNavigator中的計數遞增,確實會創建新記錄。 (在這一點上,我通常停止程序實際上保存任何東西到桌子上。)

如果我刪除「完成」複選框的綁定,然後再試一次,當我按下添加記錄按鈕時,其他文本框清除因爲他們應該。把「完成」複選框綁定回去,它停止工作。

SQL服務器中的「Completed」字段爲「bit」,默認值爲「0」,因此所有數據都有有效的條目,「Completed」字段中沒有任何值爲NULL。我嘗試過用各種方法來綁定「Completed」複選框,並始終存在相同的問題。

目前沒有驗證代碼或任何其他真實事件,因爲這是在項目的開始,但它有點煩人,因爲我需要使用複選框。

任何人有任何想法我在這裏做錯了嗎?

回答

0

花了整個週末來扯到這個我有解決方案。

從我在測試過程中能夠確定的是,如果您使用帶有BindingNavigator的複選框的表單,BindingNavigator希望看到複選框的「CheckState」而不僅僅是「Check」州。

這裏的問題是,如果您綁定到「CheckState」並且您的字段是布爾值,那麼您將得到一個錯誤,因此您必須將格式標誌翻轉爲「True」並將「nullValue」設置爲「CheckState」。未選中」。

所以我的複選框綁定現在..

Me.Completed.DataBindings.Add("CheckState", frmBindingSource, "Completed", True, DataSourceUpdateMode.OnValidation, CheckState.Unchecked) 

使用上面的解決了這個問題。

相關問題