2009-04-23 6 views
5

Je sais comment avoir un GridView modifiable avec un SqlDataSource dans lequel chaque édition (mise à jour/insertion/suppression) est immédiatement persisté dans la base de données (en utilisant UpdateCommand, Insertcommand, SqlDataSource). Ce dont j'ai besoin maintenant est d'avoir un GridView éditable qui maintient toutes les modifications dans viewstate jusqu'à ce que l'utilisateur appuie sur un bouton "Save" ailleurs sur le formulaire.GridView modifiable qui stocke les modifications dans viewstate jusqu'à enregistrer

En d'autres termes:

  1. Lors de la première charge, renseignez GridView à partir de données DB
  2. utilisateur effectue diverses modifications aux données qui ne sont pas conservées à la DB encore, mais qui survivent grâce à un nombre des publications.
  3. utilisateur appuie sur Enregistrer et tous les changements sont conservés à la DB

Je suppose que je vais devoir écrire du code personnalisé pour conserver les données à l'étape 3, mais est-il un simple, out-of approche the-box à l'étape 2?

+1

1+ Je dois faire exactement la même chose, avez-vous trouvé une solution? –

Répondre

2

Vous voulez utiliser un DataSet ou DataTable et utiliser les éléments suivants:

myDataSet.AcceptChanges(); 

Ce engage les changements lorsque vous appelez cette méthode sur le DataSet, DataTable ou DataRow. Pensez à cela presque comme un SqlTransaction où vous devez commettre ou revenir en arrière. J'espère que cela t'aides!

voir le lien: Accept Changes

1

je peux suggérer, faire ce qui suit:
1) créer un objet de liste personnalisée qui stocke vos données. Téléchargez les données de base de données sur cet objet et enregistrez-les dans l'état de la session.

Objet:

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

données Téléchargement à la liste:

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

inv_clai= dataFromDB 

Enregistrer à la session:

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

2) GridView se lient à l'objet et de manipuler les données que vous avez besoin .

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) sauvegarder les données de l'objet de liste de session dans la base de données lorsque vous êtes prêt.