2009-04-23 13 views
5

Sé cómo tener un GridView editable junto con un SqlDataSource en el que cada edición (actualización/inserción/eliminación) se conserva inmediatamente en la base de datos (utilizando UpdateCommand, Insertarmand, etc. de SqlDataSource))GridView editable que almacena cambios en viewstate hasta guardar

Lo que necesito ahora es tener un GridView editable que mantenga todas las ediciones en viewstate hasta que el usuario presione el botón "Guardar" en otro lugar del formulario.

En otras palabras:

  1. En primera carga, poblar el GridView a partir de datos DB
  2. usuario hace varias ediciones a los datos, que no se conservan a la DB todavía, pero que sobreviven a través de cualquier número de las devoluciones.
  3. El usuario pulsa en Guardar, y todos los cambios se conservan con el PP

supongo que necesitaré para escribir código personalizado para persistir los datos en el paso 3, pero no es un sencillo, fuera de la el enfoque de caja al paso 2?

+1

1+ Tengo que hacer exactamente lo mismo, ¿se te ocurrió una solución? –

Respuesta

2

que desee utilizar un conjunto de datos o DataTable y utilizar los siguientes:

myDataSet.AcceptChanges(); 

Esto confirma los cambios cuando se llama a este método en el conjunto de datos, DataTable o DataRow. Piense en esto casi como un SqlTransaction donde necesita comprometer o revertir. ¡Espero que esto ayude!

vea el enlace: Accept Changes

1

me puede sugerir que hacer lo siguiente:
1) crear un objeto de lista personalizada que almacena sus datos. Suba los datos de DB a ese objeto y guárdelo en el estado de la sesión.

objeto:

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

cargar los datos en la lista:

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

inv_clai= dataFromDB 

Guardar a sesión:

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

2) se unen gridview al objeto y manipular los datos como sea necesario .

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) guarde los datos del objeto de la lista de sesiones en la BD cuando esté listo.