2012-04-08 41 views
1

我對C#中的數據庫(但不是C#本身)和數據綁定的整個概念非常陌生,所以請牢記這一點。如果這影響到我也使用SQL Server CE。如何獲取綁定的winforms控件在其數據源更新時進行刷新?

我試圖使用VS2010構建的強類型數據集來訪問SQL Server CE數據庫,並將WinForms控件綁定到它以顯示數據。我可以很好地控制綁定,並顯示當前數據庫中的數據沒有問題。我也可以在數據庫中插入新數據,如果我重新啓動應用程序,插入的數據顯示在控件中(特別是ComboBox,但我將來會使用更多)。

問題是新行根本沒有顯示,直到我重新啓動應用程序,我對數據綁定的理解是控件應該自動更新自己。我已經閱讀了關於INotifyPropertyChanged的內容,但是我不確定在這裏使用它是否正確,如果是這樣,我如何將它用於行插入?

我綁定組合框像這樣:

DataSet.tagDataTable tagdata = new tagTableAdapter().GetData(); 
comboBox1.DataSource = tagdata; 
comboBox1.DisplayMember = tagdata.tagnameColumn.ColumnName; 
comboBox1.ValueMember = tagdata.tagIDColumn.ColumnName; 

和插入這樣的:

Guid g = Guid.NewGuid(); 
new tagTableAdapter().Insert(g, Name) 

其中Name是剛剛從一個文本框拉的字符串。

謝謝。

編輯:我應該提到我使用的數據庫表叫做標籤,有兩列,標籤ID和標記名。 tagID是一個GUID,標記名是一個varchar。

+0

請檢查[如何向數據表添加行](http://msdn.microsoft.com/en-us/library/5ycd1034%28v=vs.100%29.aspx)。我相信通過DataTable添加一行將觸發必要的通知。如果沒有,嘗試在[BindingSource類](http://msdn.microsoft.com/en-us/library/h974h4y2.aspx) – 2012-04-08 19:59:33

回答

2

你在做什麼與你的TableAdpater.Insert直接插入你的數據到你的數據庫,你繞過你的應用程序中的任何通知。如果你這樣做,那麼你必須做什麼iefpw說,那就是重新加載你的數據表並重新綁定你的控件。

另一種方法是將一行添加到數據表中。你可以嘗試這樣的事情:

// retrieve the datatable from the control 
DataSet.tagDataTable tagdata = comboBox1.DataSource as DataSet.tagDataTable; 
// create a new row and fill in the data 
var dr = tagdata.NewRow(); 
dr["tagid"] = Guid.NewGuid(); 
dr["tagname"] = Name; 
// actually add it to the table 
tagdata.Rows.Add(dr); 

此時您已經將其添加到您的DataTable和你的組合框會自動更新,但需要注意的是,它並沒有被寫入到數據庫中,以便你需要以確保在某些時候保存到數據庫。

+0

包裝tagdata謝謝,這工作。 – NastyEbilPiwate 2012-04-09 11:24:18

0

您應該再次綁定數據並像第一次那樣再次刷新控件。它不僅僅顯示數據。它是機械的。這不是實時的。

相關問題