Database di aggiornamento della modifica del valore della cella Datagridview

Ho recuperato i dati dal database Mysql in un DataGridView1. Supponiamo che io sia nella riga 0. Quando cambio il contenuto di Riga 0, Cella 1 e premere tasto invio o un pulsante, la query Aggiornamento dovrebbe modificare quella riga, ma non riesco a modificare il valore della cella. La cella mantiene il suo valore precedente quando ricarico i dati e il database non viene modificato. Ad esempio, se cambio il contenuto di una cella nella colonna Client_Name da “Acs” a “Gmt”, come posso cambiare il valore della cella da “Acs” a “Gmt”? e per averlo aggiornato nel database Mysql, sto usando c # in Vs 2012. di seguito è riportato il mio codice che recupera il mio database in datagridview1 ogni aiuto è ben accetto grazie.

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data; using MySql.Data.MySqlClient; using System.Configuration; using System.Data.SqlClient; namespace PI.Gen { public partial class frmMain : Form { MySqlConnection Conn; public frmMain() { InitializeComponent(); btnDisconnect.Enabled = true; btnLoadData.Enabled = false; btnLoadClients.Enabled = false; } private void btnConnect_Click(object sender, EventArgs e) { string strConnect = "server=" + txtServer.Text + ";uid=" + txtUsername.Text + ";pwd=" + txtPassword.Text + ";database=" + txtDatabase.Text; try { if (txtServer.TextLength <= 0 || txtUsername.TextLength <= 0 || txtDatabase.TextLength <= 0) { MessageBox.Show("You have an empty database connection field. Please supply a valid value."); return; } Conn = new MySqlConnection(strConnect); Conn.Open(); if (Conn.State.ToString() != "Open") { MessageBox.Show("Could not open database connection"); return; } btnDisconnect.Enabled = true; btnConnect.Enabled = false; btnLoadData.Enabled = true; btnLoadClients.Enabled = true; // btnSubmitClient.Enabled = true; } catch (Exception ex) // catch on general exceptions, not specific { MessageBox.Show(ex.Message); return; } } private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { if (Conn != null) { Conn.Close(); } } private void btnDisconnect_Click(object sender, EventArgs e) { try { Conn.Close(); Conn = null; btnDisconnect.Enabled = false; btnConnect.Enabled = true; btnLoadData.Enabled = false; btnLoadClients.Enabled = false; } catch (Exception ex) { MessageBox.Show(ex.Message); return; } } private void btnLoadData_Click(object sender, EventArgs e) { try { string CmdString = "SELECT * FROM t_receipients"; MySqlDataAdapter sda = new MySqlDataAdapter(CmdString, Conn); DataSet ds = new DataSet(); sda.Fill(ds); dataGridView1.DataSource = ds.Tables[0].DefaultView; } catch (Exception ex) { MessageBox.Show(ex.Message); return; } } private void btnLoadClients_Click(object sender, EventArgs e) { try { string CmdString = "SELECT * FROM t_clients"; MySqlDataAdapter sda = new MySqlDataAdapter(CmdString, Conn); DataSet ds = new DataSet(); sda.Fill(ds); dataGridView1.DataSource = ds.Tables[0].DefaultView; } catch (Exception ex) { MessageBox.Show(ex.Message); return; } } 

Dopo una serie di tentativi ed errori, ho finalmente trovato quello che stavo cercando, quindi essere in grado di aggiornare il database da datagridview è il mio codice che funziona al 100% spero che aiuti qualcuno in futuro, e grazie a @RageComplex per dare una mano, ma un’altra cosa qualcuno sa come implementare ciò intendo invece di premere il pulsante Invio per apportare modifiche alla vista dati che preferisci fare clic su un pulsante

  private void dataGridView1_RowValidated(object sender, DataGridViewCellEventArgs e) { try { DataTable changes = ((DataTable)dataGridView1.DataSource).GetChanges(); if (changes != null) { MySqlCommandBuilder mcb = new MySqlCommandBuilder(mySqlDataAdapter); mySqlDataAdapter.UpdateCommand = mcb.GetUpdateCommand(); mySqlDataAdapter.Update(changes); ((DataTable)dataGridView1.DataSource).AcceptChanges(); MessageBox.Show("Cell Updated"); return; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } 

Non stai aggiornando le tue modifiche al database. Mentre si mantiene aperta la connessione, ciò non significa che ciò aggiornerà automaticamente i dati.

Prima di tutto, non mantenere la connessione aperta. Nella tua app hai un pulsante di connect che è buono per i test ma non per mantenere la connessione aperta, non con i database secondo me.

Il modo in cui carichi i dati è corretto.

Date a datagridview un DataSource che è una tabella del vostro DataSet. Quindi le modifiche apportate nella vista dati sono salvate nel DataSet ma non nel database.

Ecco come aggiorni il tuo database

  public void UpdateTable(DataSet ds) { using (MySqlConnection connect = new MySqlConnection(ConnString)) { connect.Open(); MySqlDataAdapter adapt = new MySqlDataAdapter(); MySqlCommandBuilder commbuilder = new MySqlCommandBuilder(adapt); adapt.SelectCommand = new MySqlCommand("SELECT * FROM t_receipients", connect); adapt.Update(ds.Tables[0]); } } 

Assicurati, prima di aggiornare il tuo database, di utilizzare datagridview1.EndEdit()

Inoltre, si sta using , questo garantirà una connessione viene chiusa di nuovo dopo aver completato quel codice, è meglio averlo sempre in una prova, tranne.

Hai avuto difficoltà nel connettere il database come sembra essere nel giusto. Ho anche dimenticato di includere MySqlDataAdapter sopra, ho usato un adattatore globalmente in quel caso. Non volevo segnalare questa domanda come duplicata, ma ora sembra come questa risposta.

Vorrei dare il codice che ho testato nella mia applicazione. L’ho usato per l’evento click del pulsante.

 private void button3_Click(object sender, EventArgs e) { string StrQuery; try { string MyConnection2 = "server=localhost;user id=root;password=;database=k"; using (MySqlConnection conn = new MySqlConnection(MyConnection2)) { using (MySqlCommand comm = new MySqlCommand()) { comm.Connection = conn; conn.Open(); for (int i = 0; i < dataGridView3.Rows.Count; i++) { StrQuery = @"update s set Quantity='" + dataGridView3.Rows[i].Cells["Quantity"].Value.ToString() + "' where No='" + dataGridView3.Rows[i].Cells["Item No"].Value.ToString() + "';"; comm.CommandText = StrQuery; comm.ExecuteNonQuery(); } } } } catch { } } 

Penso che possa aiutarti