Hola a todos,
Tengo un webform (aspx) que contiene dos grids, lo que intento hacer es modificar los datos contenidos en un grid, alimentado por una tabla de tipo DataTable, y al presionar el botón Aceptar, mostrar los registros modificados o agregados en el segundo grid mediante la propiedad DataViewRowState de la tabla.
Al parecer, después del postback no identifica los cambios en la tabla y no se reflejan en el segundo grid.
He intentado con y sin usar variables de sesión, pero msimo resultado.
Agradezco de antemano alguna ayuda para solucionar esto. Saludos.
El código del aspx.cs es el siguiente:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class UltraWebGrid_Tester : System.Web.UI.Page
{
static DataTable dt;
DataColumn col;
DataRow row;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dt = new DataTable();
col = new DataColumn("col0");
col.Caption = "NOMBRE";
dt.Columns.Add(col);
col = new DataColumn("col1");
col.Caption = "APELLIDO";
dt.Columns.Add(col);
col = new DataColumn("col2");
col.Caption = "EMAIL";
dt.Columns.Add(col);
row = dt.NewRow();
row[0] = "Kim";
row[1] = "Abercrombie";
row[2] = "[email protected]";
dt.Rows.Add(row);
Session["dt"] = dt;
uwgTest.DataSource = Session["dt"] as DataTable;
uwgTest.DataBind();
dt.Rows[0][0] = "Catherine";
// En esta llamada si se reflejan los cambios.
CheckChanges();
}
}
protected void btnAceptar_Click(object sender, EventArgs e)
{
// En esta llamada, ocurre el postback y ya no se reflejan los cambios.
CheckChanges();
}
private void CheckChanges()
{
dt = Session["dt"] as DataTable;
DataRow[] Rows = dt.Select(null, null, DataViewRowState.OriginalRows | DataViewRowState.ModifiedCurrent | DataViewRowState.Added);
gvTest.DataSource = dt;
gvTest.DataBind();
// Tampoco de esta manera resuelvo el problema.
//gvTest.DataSource = dt.GetChanges(DataRowState.Modified | DataRowState.Added);
//gvTest.DataBind();
}
}