2009-04-23 6 views
5

So come avere un GridView modificabile insieme a un SqlDataSource in cui ogni modifica (update/insert/delete) viene immediatamente mantenuta nel database (utilizzando UpdateCommand, Insertcommand, ecc. Di SqlDataSource)).GridView modificabile che memorizza le modifiche in viewstate fino al salvataggio

Quello che mi serve adesso è avere un GridView modificabile che mantenga tutte le modifiche in viewstate finché l'utente non preme un pulsante "Salva" altrove nel modulo.

In altre parole:

  1. Al primo carico, popolano il GridView dai dati DB
  2. utente effettua varie modifiche ai dati, che non sono ancora persistenti al DB, ma che sopravvivono attraverso qualsiasi numero di postback. preme
  3. utente Salva, e tutte le modifiche vengono mantenute al DB

Suppongo che avrò bisogno di scrivere codice personalizzato a persistere i dati in fase 3, ma c'è un semplice, out-of l'approccio the-box al passaggio 2?

+1

1+ Ho bisogno di fare esattamente la stessa cosa, hai trovato una soluzione? –

risposta

2

si desidera utilizzare un DataSet o DataTable e utilizzare il seguente:

myDataSet.AcceptChanges(); 

Ciò impegna le modifiche quando si chiama il metodo che il DataSet, DataTable o DataRow. Pensa a questo come a un SqlTransaction in cui devi eseguire il commit o il rollback. Spero che questo ti aiuti!

vedi link: Accept Changes

1

posso suggerire di fare quanto segue:
1) creare un oggetto elenco personalizzato che memorizza i dati. Carica i dati del DB su quell'oggetto e salvalo nello stato della sessione.

Oggetto:

public class InvestorClaim 
    { 
    public InvestorClaim() 
    { 
    } 

    private int? _record_id; 
    private int? _ic_record_id; 
    private Int64? _lh_record_id; 

    public int? record_id 
    { 
     get { return _record_id; } 
     set { _record_id = value; } 
    } 

    public int? ic_record_id 
    { 
     get { return _ic_record_id; } 
     set { _ic_record_id = value; } 
    } 

    public Int64? lh_record_id 
    { 
     get { return _lh_record_id; } 
     set { _lh_record_id = value; } 
    } 
} 

Carica dati alla lista:

List<InvestorClaim> inv_claim = new List<InvestorClaim>(); 

inv_clai= dataFromDB 

Salva alla sessione:

HttpContext.Current.Session[ "InvestorClaimsObject" ] = inv_claim; 

2) si legano GridView per l'oggetto e manipolare i dati di cui hai bisogno .

protected void yourGridView_Bind() 
    { 
    inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>; 
    yourGridView.DataSource = inv_claim; 
    BindData(); 
    } 

    protected void yourGridView_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    {  
    inv_claim = HttpContext.Current.Session[ "InvestorClaimsObject" ] as List<InvestorClaim>; 

    //Update the values. 
    GridViewRow row = yourGridView.Rows[e.RowIndex]; 
    inv_claim[row.DataItemIndex].lh_record_id = ((TextBox)(row.Cells[1].Controls[0])).Text; 
    inv_claim[row.DataItemIndex].ic_record_id = ((TextBox)(row.Cells[2].Controls[0])).Text; 

    //Reset the edit index. 
    yourGridView.EditIndex = -1; 

    //Bind data to the GridView control. 
    yourGridView.DataSource = inv_claim; 
    BindData(); 
} 

3) salvare i dati dall'oggetto della lista di sessione su DB quando è pronto.