Datagrid ed update dalla griglia

di il
3 risposte

Datagrid ed update dalla griglia

Buongiorno. Come da titolo , qualcuno mi puo' indirizza e magari mostrare con dei frammmenti di codice, come aggiornare la tabella database modificando la griglia.

ho trovato in rete l'utilizzo del metodo RowEditEnding . L'ambiente di lavoro e WPF in c#. Grazie. Anche solo un tutorial, andrebbe bene

Grazie mille

3 Risposte

  • Re: Datagrid ed update dalla griglia

    23/10/2025 - pordoi ha scritto:

    come aggiornare la tabella database modificando la griglia.

    Ci sono un milione di modi diversi. Se usi i DataSet tipizzati si fa in un modo, se usi EF si fa in un altro.

    Io utilizzo una terza via che assomiglia ad EF, ma è "home made": creo una classe che rappresenta una riga della tabella e preparo un flag [Modificato] ed un metodo [Update]. Quando devo visualizzare, organizzo gli oggetti in una ObservableCollection<oggetto> e la bindo al controllo. Quando aggiungo/rimuovo, opero sulla lista. Quando aggiorno un elemento cambio [Modificato] e se salvo, ciclo la lista richiamato l'Update solo se Modificato = true.

    Casereccio, ma è semplice e non devo studiarmi EF, che per quel che faccio io è per me macchinoso.

  • Re: Datagrid ed update dalla griglia

    23/10/2025 - Sgrubak ha scritto:

    23/10/2025 - pordoi ha scritto:

    come aggiornare la tabella database modificando la griglia.

    Ci sono un milione di modi diversi. Se usi i DataSet tipizzati si fa in un modo, se usi EF si fa in un altro.

    Io utilizzo una terza via che assomiglia ad EF, ma è "home made": creo una classe che rappresenta una riga della tabella e preparo un flag [Modificato] ed un metodo [Update]. Quando devo visualizzare, organizzo gli oggetti in una ObservableCollection<oggetto> e la bindo al controllo. Quando aggiungo/rimuovo, opero sulla lista. Quando aggiorno un elemento cambio [Modificato] e se salvo, ciclo la lista richiamato l'Update solo se Modificato = true.

    Casereccio, ma è semplice e non devo studiarmi EF, che per quel che faccio io è per me macchinoso.

    ascolto il consiglio sicuramente. Per adesso mi sto facendo pratica, di solito facevo Update. 

    ho trovato questo metodo ,ma adesso ne vedo altri 

    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Threading;
    using Dapper;
    namespace provePannelloDinamico
    {
       public partial class primo : UserControl
       {
           private readonly string connectionString =
               @"Data Source=ACER\SQLEXPRESS;Initial Catalog=xxxMMI;Integrated Security=True;Encrypt=False;";
           public primo()
           {
               InitializeComponent();
               LoadData();
           }
           private void LoadData()
           {
               try
               {
                   DataTable table = new DataTable();
                   using (SqlConnection connection = new SqlConnection(connectionString))
                   {
                       connection.Open();
                       using (SqlCommand command = new SqlCommand("SELECT * FROM dbo.anagrafe", connection))
                       {
                           SqlDataAdapter adapter = new SqlDataAdapter(command);
                           adapter.Fill(table);
                       }
                   }
                   datagrid.ItemsSource = table.DefaultView;
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Errore durante il caricamento dei dati: " + ex.Message);
               }
           }
           private void DataGrid_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
           {
               if (e.EditAction == DataGridEditAction.Commit)
               {
                   Dispatcher.BeginInvoke(new Action(() =>
                   {
                       var item = e.Row.Item as DataRowView;
                       if (item != null)
                       {
                           // Prendi i valori dalle colonne
                           string cmd = item["cmd"].ToString();
                           string nome = item["nome"].ToString();
                           string cognome = item["cognome"].ToString();
                           // Salva nel database
                           SalvaDatabase(cmd, nome, cognome);
                       }
                   }), System.Windows.Threading.DispatcherPriority.Background);
               }
           }
           private void SalvaDatabase(string cmd, string nome, string cognome)
           {
               try
               {
                   using (var connection = new SqlConnection(connectionString))
                   {
                       // Corretto: mancava virgola dopo Nome
                       string sql = "UPDATE anagrafe SET nome = @Nome, cognome = @Cognome WHERE cmd = @Cmd";
                       connection.Execute(sql, new { Cmd = cmd, Nome = nome, Cognome = cognome });
                   }
                   MessageBox.Show("Dati salvati con successo!");
               }
               catch (Exception ex)
               {
                   MessageBox.Show("Errore durante il salvataggio: " + ex.Message);
               }
           }
       }
    }
  • Re: Datagrid ed update dalla griglia

    23/10/2025 - pordoi ha scritto:

    ho trovato questo metodo

    Così stai usando il DataSet non tipizzato. È un'alternativa...

    Io non mi ci trovo. Troppo lavoro per recuperare i dati. E poi stai delegando alla griglia il compito di aggiornare il DB, per di più facendolo ad ogni singola variazione. Ho sempre trovato meglio il classico bottone Salva e la sua "controparte" annulla. Penso sia tanto questione di stile.

    E poi così facendo non hai tutta la logica per il binding... Ti perdi tutto il buono del WPF. :-|

Devi accedere o registrarti per scrivere nel forum
3 risposte