none
Controles en tiempo de ejecución RRS feed

  • Pregunta

  • Hola buenos días: He creado diferentes controles en tiempo de ejecución dentro de una tabla.  No puedo recuperarlos. Aunque los tengo en pantalla cuando pulso el Boton de Grabar encuesta en Page Load la tabla tiene 0 filas i la pantalla tiente 0 controles. Estoy trabajando con visual studio 2010 y c#.

    Alguien puede ayidarme?

    Saludos

    Esther

    martes, 20 de diciembre de 2011 12:00

Respuestas

  • Buenas al final he encontrado la solución, al recargar la página miro si no existen los controles y si no existen los vuelvo a cargar, de esta forma los encuentra y puedo pedir los datos que me han modficado en pantalla la función es esta:

     

    protected override void LoadViewState(object

    savedState)

    {

     

    base

    .LoadViewState(savedState);

    ENC = (

    ClsEncuesta)Session["ENC"

    ];

     

    if (ViewState["controsladded"] == null

    )

    MontarEncuestaPantalla();

    }

    • Marcado como respuesta Estherilla miércoles, 21 de diciembre de 2011 16:16
    miércoles, 21 de diciembre de 2011 16:14

Todas las respuestas

  • Si tienes la tabla creada, intenta añadirlos directamente a la celda que quieras:

     

                Table tabla = tableLayout;
                Label et1 = new Label() { ID = "lbl1", Text = "Etiqueta1" };
                tabla.Rows[0].Cells[0].Controls.Add(et1);
    

    martes, 20 de diciembre de 2011 12:41
  • Hola buenos dias: Gracias por contestar, lo hago tal i como dices, pero cuando hago el submit, no recibo nada dentro de la tabla, si yo hago

    TableEncuesta.Rows, el resultado es 0, es decir todo lo que le he añadido a la tabla ha desaparecido con la consecuencia de que no puedo comprobar que datos tienen los dropdowlist ni los textos.

    Saludos,

    Esther

    martes, 20 de diciembre de 2011 13:37
  • Hola buenos dias: Gracias por contestar, lo hago tal i como dices, pero cuando hago el submit, no recibo nada dentro de la tabla...

     

    ¿Las filas y las columnas las tienes creadas en la página o también las añades dinámicamente?. Si fuese así, vigila que se añadan correctamente.

    Te pongo un ejemplo de una tabla creada íntegramente desde el código.

     

    private void creaControles()
    {
        Table tabla = new Table();
        TableRow fila = new TableRow();
        TableCell c1 = new TableCell();
        Label l1 = new Label() { ID = "lbl1", Text = "Etiqueta" };
        c1.Controls.Add(l1);
        fila.Cells.Add(c1);
        tabla.Rows.Add(fila);
        this.Controls.Add(tabla);
    }
    

     

     

    martes, 20 de diciembre de 2011 14:17
  • La tabla la tengo creada en el código y le añado las celdas, pongo el code behind, creo que lo estoy haciendo exactamente igual, tambien pongo como intento recoger los datos de los controles.

       protected void MontarEncuestaPantalla()
        {
            for (int c = 0; c < ENC.lTitulos.Count; c++)
            {
                TableRow tHeader = new TableRow();
                tHeader.CssClass = "GridView";
                tHeader.ID = "G" + c;
                TableEncuesta.Rows.Add(tHeader);
    
                TableCell tCell = new TableCell();
                tCell.ColumnSpan = 3;
                tCell.HorizontalAlign = HorizontalAlign.Left;
                tCell.Text = ENC.lTitulos[c].NomGrupo;
                tCell.CssClass = "GridViewHeaderStyle";
                tHeader.Cells.Add(tCell);
    
                for (int f = 0; f < ENC.lTitulos[c].lPreguntas.Count; f++)
                {
                    TableRow tHeaderP = new TableRow();
                    tHeaderP.CssClass = "GridView";
                    if (ENC.lTitulos[c].lPreguntas[f].DimeModelo_Pregunta(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta, (SqlConnection)Application["cnFormacion"]) == "TEXTO")
                    {
                        tHeaderP.ID = "T" + f;
                    }
                    else
                    {
                        tHeaderP.ID = "P" + f;
                    }
                    TableEncuesta.Rows.Add(tHeaderP);
    
                    TableCell tCellP1 = new TableCell();
                    tCellP1.HorizontalAlign = HorizontalAlign.Left;
                    tCellP1.VerticalAlign = VerticalAlign.Top;
                    tCellP1.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].ordenpregunta);
                    tCellP1.CssClass = "GridViewAlternatingRowStyle";
                    tHeaderP.Cells.Add(tCellP1);
    
                    TableCell tCellP2 = new TableCell();
                    tCellP2.HorizontalAlign = HorizontalAlign.Left;
                    tCellP2.VerticalAlign = VerticalAlign.Top;
                    tCellP2.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                    tCellP2.CssClass = "GridViewAlternatingRowStyle";
                    tHeaderP.Cells.Add(tCellP2);
                    tCellP2 = null;
    
                    switch (BuscarModeloResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta))
                    {
                        case "NUMERICO_HORIZONTAL":
                            Label lblMenos = new Label();
                            lblMenos.Text = "<table><tr><td>-</td><td>";
                            Label lblMas = new Label();
                            lblMas.Text = "</td><td>+</td></tr></table>";
                            RadioButtonList rbLista = new RadioButtonList();
    
                            rbLista.RepeatDirection = RepeatDirection.Horizontal;
                            rbLista.SelectedIndexChanged += new EventHandler(this.Asignacion_Numeros);
                            rbLista.TextAlign = TextAlign.Left;
                            int nMenor = NumeroResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta, "MENOR");
                            int nMayor = NumeroResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta, "MAYOR");
                            for (int i = nMenor; i <= nMayor; i++)
                            {
                                rbLista.Items.Add(i.ToString());
                                rbLista.Items[rbLista.Items.Count - 1].Text = i.ToString();
                                rbLista.Items[rbLista.Items.Count - 1].Value = i.ToString();
                                rbLista.ID = "NH" + c.ToString() + "_" + f.ToString();
    
                            }
    
                            rbLista.Items[rbLista.Items.Count - 1].Selected = true;
                            //rbLista.SelectedIndexChanged += new System.EventHandler(CargarResultadoNumerico);
                            TableCell tCellNH = new TableCell();
                            tCellNH.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                            tCellNH.CssClass = "GridViewAlternatingRowStyle-nowrap";
                            tCellNH.Controls.Add(lblMenos);
                            tCellNH.Controls.Add(rbLista);
                            tCellNH.Controls.Add(lblMas);
                            tHeaderP.Cells.Add(tCellNH);
    
                            break;
                        case "NUMERICO_VERTICAL":
                            Label lblMenosV = new Label();
                            lblMenosV.Text = "<table><tr><td>-</td></tr><tr><td>";
                            Label lblMasV = new Label();
                            lblMasV.Text = "</td></tr><tr><td>+</td></tr></table>";
                            RadioButtonList rbListav = new RadioButtonList();
                            rbListav.RepeatDirection = RepeatDirection.Vertical;
                            rbListav.TextAlign = TextAlign.Left;
                            int nMenorv = NumeroResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta, "MENOR");
                            int nMayorv = NumeroResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta, "MAYOR");
                            for (int i = nMenorv; i <= nMayorv; i++)
                            {
                                rbListav.Items.Add(i.ToString());
                                rbListav.Items[rbListav.Items.Count - 1].Text = i.ToString();
                                rbListav.Items[rbListav.Items.Count - 1].Value = i.ToString();
                                rbListav.ID = "NV" + c.ToString() + "_" + f.ToString();
    
    
                            }
                            rbListav.Items[rbListav.Items.Count - 1].Selected = true;
                            TableCell tCellNV = new TableCell();
                            tCellNV.HorizontalAlign = HorizontalAlign.Left;
                            tCellNV.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                            tCellNV.CssClass = "GridViewAlternatingRowStyle-nowrap";
                            tCellNV.Controls.Add(lblMenosV);
                            tCellNV.Controls.Add(rbListav);
                            tCellNV.Controls.Add(lblMasV);
                            tHeaderP.Cells.Add(tCellNV);
                            break;
                        case "ELIGEOPCION_VERTICAL":
                            RadioButtonList rbListaOpcionV = new RadioButtonList();
                            rbListaOpcionV.RepeatDirection = RepeatDirection.Vertical;
                            rbListaOpcionV.TextAlign = TextAlign.Right;
    
                            string[] aDesc = DescripcionResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta).Split('|');
                            for (int i = 0; i <= aDesc.GetUpperBound(0); i++)
                            {
                                rbListaOpcionV.Items.Add(aDesc[i].ToString());
                                rbListaOpcionV.Items[rbListaOpcionV.Items.Count - 1].Text = aDesc[i].ToString();
                                rbListaOpcionV.Items[rbListaOpcionV.Items.Count - 1].Value = aDesc[i].ToString();
                                rbListaOpcionV.ID = "OV" + c.ToString() + "_" + f.ToString();
    
                            }
                            rbListaOpcionV.Items[rbListaOpcionV.Items.Count - 1].Selected = true;
                            TableCell tCellOV = new TableCell();
                            tCellOV.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                            tCellOV.HorizontalAlign = HorizontalAlign.Left;
                            tCellOV.CssClass = "GridViewAlternatingRowStyle-nowrap";
                            tCellOV.Controls.Add(rbListaOpcionV);
                            tHeaderP.Cells.Add(tCellOV);
                            break;
                        case "ELIGEOPCION_HORIZONTAL":
                            RadioButtonList rbListaOpcionH = new RadioButtonList();
                            rbListaOpcionH.RepeatDirection = RepeatDirection.Vertical;
                            rbListaOpcionH.TextAlign = TextAlign.Right;
    
                            string[] aDescH = DescripcionResp(ENC.lTitulos[c].lPreguntas[f].TipoRespuesta).Split('|');
                            for (int i = 0; i <= aDescH.GetUpperBound(0); i++)
                            {
                                rbListaOpcionH.Items.Add(aDescH[i].ToString());
                                rbListaOpcionH.Items[rbListaOpcionH.Items.Count - 1].Text = aDescH[i].ToString();
                                rbListaOpcionH.Items[rbListaOpcionH.Items.Count - 1].Value = aDescH[i].ToString();
                                rbListaOpcionH.ID = "OH" + c.ToString() + "_" + f.ToString();
    
                            }
                            rbListaOpcionH.Items[rbListaOpcionH.Items.Count - 1].Selected = true;
                            TableCell tCellOH = new TableCell();
                            tCellOH.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                            tCellOH.CssClass = "GridViewAlternatingRowStyle-nowrap";
                            tCellOH.Controls.Add(rbListaOpcionH);
                            tHeaderP.Cells.Add(tCellOH);
                            break;
                        case "TEXTO":
                            try
                            {
                                TextBox txt = new TextBox();
                                txt.CssClass = "TxtDescripcion";
                                //txt.Rows = 4;
                                //txt.TextChanged += new System.EventHandler(Asignacion_Numeros);
                                //txt.TextMode = TextBoxMode.MultiLine;
                                txt.ID = "T" + c.ToString() + "_" + f.ToString();
                                TableRow tHeaderT = new TableRow();
                                tHeaderT.CssClass = "GridView";
                                tHeaderT.ID = "X" + f;
    
                                TableEncuesta.Rows.Add(tHeaderT);
                                TableCell tCellTexto = new TableCell();
                                tCellTexto.ColumnSpan = 3;
                                tCellTexto.Text = Convert.ToString(ENC.lTitulos[c].lPreguntas[f].pregunta);
                                tCellTexto.CssClass = "GridViewAlternatingRowStyle-nowrap";
                                tCellTexto.Controls.Add(txt);
    
                                tHeaderT.Cells.Add(tCellTexto);
    
                            }
                            catch (Exception exc) { }
    
                            break;
    
                    }
    
                }
            }
    
            //Session["TableEncuesta"] = TableEncuesta;
            Session["ENC"] = ENC;
    
        }
    

    función recoger datos.

    protected void recogerDatos()
        {
            int nGrupo = 0;
            int nPregunta = 0;
            RadioButtonList rd;
    
            int n = 0;
            Prueba.Text = "Por aquí paso";
            //this.FindControl("LN_0_0");
            foreach (Control c in TableEncuesta.Controls)
            {
                Prueba.Text += n.ToString() + c.ID;
                n++;
            }
    
            foreach (TableRow TR in TableEncuesta.Rows)
            {
                switch (TR.ID.Left(1))
                {
                    case ("G"):
                        break;
                    case ("P"):
                        try
                        {
                            rd = (RadioButtonList)TR.Cells[2].Controls[1];
                        }
                        catch (Exception ex)
                        {
                            rd = (RadioButtonList)TR.Cells[2].Controls[0];
                        }
                        string[] aDatos = rd.ID.Split('_');
                        switch (aDatos[0].Left(2))
                        {
                            case ("LN"):
                            case ("LV"):
                                nGrupo = Convert.ToInt32(aDatos[0].Rigth(aDatos[0].Length - 2));
                                nPregunta = Convert.ToInt32(aDatos[1]);
                                ENC.lTitulos[nGrupo].lPreguntas[nPregunta].RespuestaNumerica = Convert.ToInt32(rd.SelectedValue);
                                break;
                            case ("OV"):
                            case ("OH"):
                                nGrupo = Convert.ToInt32(aDatos[0].Rigth(aDatos[0].Length - 2));
                                nPregunta = Convert.ToInt32(aDatos[1]);
                                ENC.lTitulos[nGrupo].lPreguntas[nPregunta].RespuestaOpcion = rd.SelectedValue.ToString();
                                break;
                        }
                        break;
                    case ("T"):
                        break;
                    case ("X"):
                        TextBox txt = (TextBox)TR.Cells[0].Controls[0];
                        string[] aDatostxt = txt.ID.Split('_');
                        if (aDatostxt[0].Left(1) == "T")
                        {
                            nGrupo = Convert.ToInt32(aDatostxt[0].Rigth(aDatostxt[0].Length - 1));
                            nPregunta = Convert.ToInt32(aDatostxt[1]);
                            ENC.lTitulos[nGrupo].lPreguntas[nPregunta].RespuestaTexto = txt.Text.ToString();
                        }
                        break;
                }
            }
            //GrabarDatosDB();
        }
    
    


    Saludos.

    Gracias.
     

    martes, 20 de diciembre de 2011 14:34
  • Añade un throw en el catch, así te mostrará el error que se produce.

    martes, 20 de diciembre de 2011 15:10
  • Buenas!!!!

    Ya lo he hecho y no produce ningun error.

     

    gracias.

    saludos.

    martes, 20 de diciembre de 2011 16:03
  • Pues lo siento, pero no veo dónde puede fallar. En principio el header, por lo menos, debería añadirse. Intenta poner algún breakpoint al principio y verás si te hace los bucles.

    Lo único que se me ocurre es que ENC.lTitulos.Count sea 0 desde el principio...

    martes, 20 de diciembre de 2011 18:26
  • Buenas al final he encontrado la solución, al recargar la página miro si no existen los controles y si no existen los vuelvo a cargar, de esta forma los encuentra y puedo pedir los datos que me han modficado en pantalla la función es esta:

     

    protected override void LoadViewState(object

    savedState)

    {

     

    base

    .LoadViewState(savedState);

    ENC = (

    ClsEncuesta)Session["ENC"

    ];

     

    if (ViewState["controsladded"] == null

    )

    MontarEncuestaPantalla();

    }

    • Marcado como respuesta Estherilla miércoles, 21 de diciembre de 2011 16:16
    miércoles, 21 de diciembre de 2011 16:14