2012-11-05 19 views
7

Ho un DataGridView fatto di un DataSet di una tabella dal DB. Quando elimino una riga, questa viene aggiornata nel database ma non viene rimossa da GridView. Solo quando riavvio l'applicazione viene rimosso da GridView.Datagridview non aggiornando/aggiornando

Please help

+0

Vuoi dire che, quando apri di nuovo l'applicazione, solo tu stai vedendo le modifiche in DataGridView? –

+0

Si prega di trovare la risposta [qui] (http://stackoverflow.com/a/9307232/447704) –

risposta

7

Questo è un processo molto semplice.

1.) Creare una sorgente di rilegatura

2.) Impostare l'origine dati per questo oggetto l'Elenco DataSet.

3.) Imposta l'origine dati per il tuo DatagridView come oggetto sorgente Binding.

Esempio di codice:

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

Ora, tutte le modifiche apportate nel DataTable si propagherà per accedere al tuo GridView automaticamente.

+0

Come posso fare la stessa cosa in DataGrid? – tpbafk

0

Spero che questo ti aiuti?

se stai visualizzando il tuo tavolo in dgv e per cancellare qualcosa da quel tavolo hai un pulsante sul tuo modulo di vincita. hai scelto diciamo ID e fai clic sul pulsante "elimina" per eliminare un elemento dalla tabella db. Ecco il codice:

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(); 
      } 
     } 

Si noterà qui che ho db MySQL, ma non si preoccupano te stesso con quello.

+0

Grazie mille. Aggiustato. Gentilmente puoi dirmi quando aggiungo i dati al db. il datagridview non viene aggiornato. Ho provato a utilizzare il metodo di aggiornamento ma non funziona:/ – user966614

+0

Inoltre, quando si preme il tasto "INSERIRE" o "AGGIUNGI" nel pulsante tabella, è necessario caricare nuovamente la tabella (passare di nuovo attraverso questa selezione * da ....). E devi farlo ogni volta che apporti una modifica al tuo tavolo !!! – Sylca

-3

È necessario chiamare questa funzione dopo ogni eliminazione (Re-bind Grid).

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

Non c'è 'DataBind()' in WindowsForms. –

10

È necessario ripristinare la rilegatura sull'origine di associazione.

bindingSource.ResetBindings(false); 
+0

ha funzionato per me. Grazie! –

0

Se database viene aggiornato e si desidera aggiornare DataGridView, chiamare questo:

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

Per esempio: Dove si trova il nome della tabella (ad esempio Clienti) ed è il nome del database (ad esempio MyDB) .

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

Avvertenza: questa risposta presuppone che DataGridview sia un semplice singolo indipendente, nessun padre DataGridview (tabella correlata). ovviamente questo è OK per la domanda originale. In caso contrario, è necessario compilare un metodo utilizzando la/e chiave/e esterna/e richiesta/e – gg89