2012-11-05 126 views
7

我有一個DataGridView由數據庫中的表的DataSet組成。當我刪除一行時,它會在數據庫中更新,但不會從GridView中刪除。只有當我重新啓動應用程序時,它纔會從GridView中移除。Datagridview不更新/刷新

請幫忙

+0

您的意思是說,當您再次打開您的應用程序時,只有您看到DataGridView中的更改? –

+0

請您找到答案[這裏](http://stackoverflow.com/a/9307232/447704) –

回答

7

這是一個非常簡單的過程。

1)創建綁定源

2)設置DataSource該對象到您的數據集表。

3.)將DatagridView的數據源設置爲綁定源對象。

代碼示例:現在

Dataset ds = new Dataset(); 
BindingSource bs = new BindingSource() 
bs.Datasource = ds.Table[0]; 
DatagridView.Datasource = bs; 

,您在數據表中所做的任何更改將通過對你的GridView自動紋波。

+0

DataGrid中我怎麼能做到同樣的事情? – tpbafk

0

希望這對你有幫助嗎?

如果您在dgv中顯示您的表,並且從該表中刪除了某些內容,則您的勝出表單上有一個按鈕。你選擇了我們說的ID並點擊「刪除」按鈕從數據庫表中刪除一個項目。這裏是代碼:

private void btn_Delete_Click(object sender, EventArgs e) 
     { 
      int selectedCellCount = dgv.GetCellCount(DataGridViewElementStates.Selected); 

      if (selectedCellCount > 0) 
      { 
       string selection; 

       for (int i = 0; i < selectedCellCount; i++) 
       { 
        selection = dgv.SelectedCells[i].Value.ToString(); 
        string qs_delete = "DELETE FROM yor_table WHERE id = '" + selection + "';"; 
        try 
        { 
         conn = new MySqlConnection(cs); 
         conn.Open(); 

         cmd = new MySqlCommand(); 
         cmd.Connection = conn; 
         cmd.CommandText = qs_delete; 
         cmd.ExecuteNonQuery(); 

         conn.Close(); 
         } 
         catch (Exception ex) 
         { 
          MessageBox.Show(ex.Message); 
         } 
         finally 
         { 
          if (conn != null) conn.Close(); 
         } 
        } 
       }  

//don't forget to load your table again in dgv 
      string qs_select = "SELECT * FROM your_table"; 

      System.Data.DataTable dataTable = new System.Data.DataTable(); 
      dataTable.Clear(); 
      dgv.DataSource = dataTable; 

      try 
      { 
       conn = new MySqlConnection(cs); 
       cmd = new MySqlCommand(qs_select, conn); 
       conn.Open(); 

       da = new MySqlDataAdapter(cmd); 
       da.Fill(dataTable); 

       cb = new MySqlCommandBuilder(da); 

       dgv.DataSource = dataTable; 
       dgv.DataMember = dataTable.TableName; 
       dgv.AutoResizeColumns(); 

       conn.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
      finally 
      { 
       if (conn != null) conn.Close(); 
      } 
     } 

你會注意到,我有MySQL的數據庫,但不要打擾你自己。

+0

非常感謝。修復。請問我何時將數據添加到數據庫中。 datagridview沒有被更新。我嘗試使用更新方法,但不起作用:/ – user966614

+0

此外,當您按下「INSERT」或「ADD」進入表格按鈕時,您需要重新載入表格(再次通過此選擇* from .... )。而且,每當你改變你的桌子時,你都需要這樣做! – Sylca

-3

您必須在每次刪除(重新綁定網格)後調用此函數。

void BindGrid() 
{ 
YourDataGridView.DataSource = dataset; 
YourDataGridView.DataBind(); 
} 
+1

WindowsForms中沒有'DataBind()'。 –

10

您需要重置bindingsource上的綁定。

bindingSource.ResetBindings(false); 
+0

爲我工作。謝謝! –

0

如果更新數據庫,並要刷新的DataGridView,稱之爲:

this.<table name>TableAdapter.Fill(this.<DB name>DataSet.<table name>); 

例如:哪裏是你的表的名稱(例如客戶),併爲你的數據庫的名稱(例如MYDB) 。

this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers); 
+0

注意:這個答案假定DataGridview是一個簡單的單獨的獨立的,沒有父DataGridview(相關表)。當然這對於原始問題是可以的。 否則,需要使用所需的外鍵填充方法, – gg89