2012-03-21 54 views
0

我檢查了這個主題的答案,但我仍然不知道爲什麼這不工作!請幫忙!C#Databound列表框刷新

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     SqlCeCommand insTitle = new SqlCeCommand("Insert into Titles(Title) values('" + txtAddTitle.Text +"')"); 
     insTitle.Connection = dbConnection; 

     try 
     { 
      if (dbConnection.State == ConnectionState.Closed) { dbConnection.Open(); } 
      insTitle.ExecuteNonQuery(); 


      this.hRDataSet.AcceptChanges(); 
      this.titlesTableAdapter.Update(this.hRDataSet); 
      this.tableAdapterManager.UpdateAll(this.hRDataSet); 

      lstTitles.BeginUpdate(); 
      lstTitles.DataSource = titlesBindingSource; 
      lstTitles.DisplayMember = "Title"; 
      lstTitles.ValueMember = "Title_ID"; 
      lstTitles.EndUpdate(); 
     } 
     catch (Exception insErr) 
     { 
      MessageBox.Show(insErr.Message); 
     } 
    } 

列表框「lstTitles」不會刷新,並且不會顯示添加的項目,儘管它們在數據庫中!

+0

你真的明白你寫的代碼嗎?這看起來像[貨物崇拜編程](http://en.wikipedia.org/wiki/Cargo_cult_programming)... – 2012-03-21 21:45:12

+0

我已經嘗試了很多不同的編碼方式......現在對我來說都是一絲不苟。你能在「執行查詢」之後提供幫助嗎? – user799920 2012-03-21 21:48:23

回答

0

DataAdapterUpdate方法用於使用DataSet中所做的更改來更新數據庫。你需要做的是相反的:你需要用來自數據庫的修改數據更新DataSet,所以你應該使用Fill而不是Update

無論如何,你的方法並不是最優的;由於您正在處理數據集,因此應該將新值添加到DataSet中的相應表中,然後使用Update方法更新數據庫。列表框將自動選取更改。

private void btnAdd_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     // Add a row to the DataTable 
     DataRow row = hRDataSet.Titles.NewRow(); 
     row["Title"] = txtAddTitle.Text; 
     hRDataSet.Titles.Rows.Add(row); 

     // Update the database 
     this.titlesTableAdapter.Update(this.hRDataSet); 

     // That's it, you're done ;) 
    } 
    catch (Exception insErr) 
    { 
     MessageBox.Show(insErr.Message); 
    } 
} 
+0

感謝您解釋...我走下這條路的唯一原因是因爲我的.sdf沒有被更新爲新記錄,如果我先更新數據集......至少不是當我點擊「show table data」時server explorer! – user799920 2012-03-21 22:12:11

+0

那是因爲我在調試模式下運行它! DUHHH! – user799920 2012-03-21 22:38:26

+0

@ user799920,只需更改sdf文件的「複製到輸出目錄」屬性 – 2012-03-21 22:43:04