Foros del Web » Programación para mayores de 30 ;) » .NET »

Perdida de Eventos asignados a controles creados dinamicamente

Estas en el tema de Perdida de Eventos asignados a controles creados dinamicamente en el foro de .NET en Foros del Web. La situacione es que necesito armar una grilla con "n" cantidad de columnas(variable) y "m" cantidad de fials (variable) en la que cada celda puede ...
  #1 (permalink)  
Antiguo 23/06/2007, 10:02
Avatar de martinArgentino  
Fecha de Ingreso: diciembre-2002
Mensajes: 157
Antigüedad: 21 años, 4 meses
Puntos: 1
Perdida de Eventos asignados a controles creados dinamicamente

La situacione es que necesito armar una grilla con "n" cantidad de columnas(variable) y "m" cantidad de fials (variable) en la que cada celda puede o no tener un conjunto de botones dependiendo de ciertas condiciones, por lo que concidere que lo mas conveniente era crear las celdas dinamicamente y en ella ir tirando los botones tambien creados en forma dinamica y a ellos ir asignandole los eventos a medida q se van creando.

Bien, en teoria esto deberia funcionar, pero resulta que:
1ºer porblema
El evento se asigna al boton pero al hacer click en el boton y llegar el postback al servidor se pierde la referencia del evento con el manejador de eventos. Por lo tanto no sucede nada.
1ºra solucion
En el evento PageLoad Re genero la grilla con todos sus controles para poder re-asocior los eventos de cada control (no me gusta nada el consumo de recursos para hacer algo que en teoria ya estaba echo) Y ahora si todo funciona.
2ºdo problema
Resulta que uno de los eventos hace necesario que se vuelva a dibujar la grilla. Entonces en el evento en si llamo a la funcion que crea grilla y controles
Veamos como queda la secuencia en "teoría".
1-Sucede el evento
2-En el page load se re-crea la grilla para poder asociar el evento con el manejador
3-Se ejecuta el evento y en el se vuelve a ejecutar el metodo q crea la grilla poque cambio algo en la misma.


Muy bien este modelo funciona pero en forma intermitente, la primera vez si, luego no y luego si

Alguien me puede guiar en esto?
desde ya muchas gracias escribo un ejemplito que si bien no es lo que explique grafica perfectamente en forma simplificada lo que intente explicar.
//Pagina aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
<form id="form1" runat="server">
<asp:Table ID="Table1" runat="server" EnableViewState="False">
</asp:Table>
</form>
</body>
</html>


// aspx.cs


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{

public int I
{
get
{
if (ViewState["i"] == null) ViewState["i"] = "0";
return Convert.ToInt32(ViewState["i"]);
}
set { ViewState["i"] = Convert.ToInt32(value); }
}
protected void Page_Load(object sender, EventArgs e)
{
Mostrar();
}

private void Mostrar()
{
Table1.Rows.Clear();
for (int i = 0; i < 5; i++)
{
Table1.Rows.Add(new TableRow());
Table1.Rows[0].Cells.Add(new TableCell());
Button IB = new Button();
IB.Text = "Test" + I.ToString();
IB.CommandName = "id";
IB.CommandArgument = "1_" + i;
IB.Command += new CommandEventHandler(IB_Command);
Table1.Rows[0].Cells[i].Controls.Add(IB);
}

}

void IB_Command(object sender, CommandEventArgs e)
{
if (e.CommandName == "id") Response.Write(e.CommandArgument);
I = I + 1;
Mostrar();
}


}


Saludos
__________________
Martin
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:20.