none
Duvida com montar controle em tempo de execução RRS feed

  • Pergunta

  • Amigos boa tarde

    estou precisando de ajuda urgentimente.

    Tenho um controle chamado estoque que recebe um cookie com o ID do produto cadastrado, e ao fazer isso ele resgata os dados dos tamanho referente ao produto e gera com controles necessarios tem runtime como mostra o codigo abaixo

      protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                HttpCookie cookie = Request.Cookies["IDProduto"];
                if (cookie != null)
                {
                    List<TamanhoProdutoTO> clsTamanhoProduto = TamanhoProdutoBLL.GetTamanhoProdutoByIDProduto(int.Parse(cookie.Value.ToString()));
                    clsTamanhoProduto.ForEach(delegate(TamanhoProdutoTO _clsTamanhoProduto)
                    {
                        TamanhoTO clsTamanho = new TamanhoTO();
                        clsTamanho = TamanhoBLL.GetTamanhoByID(_clsTamanhoProduto.IDTamanho);
    
                        // Montando os Label e TextBox
                        Label lbl = new Label();
                        lbl.ID = "lblTamanho" + clsTamanho.Tamanho;
                        lbl.Text = "Tamanho :" + clsTamanho.Tamanho;
    
                        TextBox txt = new TextBox();
                        txt.ID = "txtTamanho" + clsTamanho.Tamanho;
                        txt.SkinID = "TextBoxPequeno";
                        pnlControles.Controls.Add(lbl);
                        pnlControles.Controls.Add(txt);
                    });
                }
            }
        }

    porem quando vou salvar ele não esta encontrando os itens que tem nesse panel, ele somente mostra que tem 1 literal sendo que eu não defini literal em lugar nenhum.

    Segue o código do salvar

       protected void Button1_Click(object sender, EventArgs e)
        {
            MembershipUser User = Membership.GetUser();
            HttpCookie cookie = Request.Cookies["IDProduto"];
            EstoqueTO clsEstoque = new EstoqueTO();
            clsEstoque.IDProduto = int.Parse(cookie.Value);
            clsEstoque.IDUsuario = (Guid)User.ProviderUserKey;
            List<TamanhoProdutoTO> clsTamanhoProduto = TamanhoProdutoBLL.GetTamanhoProdutoByIDProduto(int.Parse(cookie.Value.ToString()));
            //Obtendo todos os controles que estão dentro do Panel
            foreach (Control control in pnlControles.Controls)
            {
    
                //Verificando se o controle é da classe TextBox (há outras formas)
                if (control is TextBox)
                {
                    clsTamanhoProduto.ForEach(delegate(TamanhoProdutoTO _clsTamanhoProduto)
                    {
                        clsEstoque.Quantidade = int.Parse(((TextBox)control).Text);
                        clsEstoque.IDTamanho = _clsTamanhoProduto.IDTamanho;
    
                        EstoqueBLL.Insert(clsEstoque);
                    });
                }
    
    
    
            }
    
    
    
        }

    Se alguem puder me ajudar fico muito agradescido!


    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quinta-feira, 13 de dezembro de 2012 17:56

Todas as Respostas

  • Ninguem????????????? =/

    "Nunca deixe que os outros te subestimen, mas tambem não seja arrogante seja humilde e prove quem é

    quinta-feira, 13 de dezembro de 2012 22:24
  • Atila vou te mandar um exemplo.

    codigo HTML

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="Script" runat="server">
            </asp:ScriptManager>
            <asp:UpdatePanel ID="Update_Controles" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:DropDownList ID="DDL_Criar_Controle" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DDL_Criar_Controle_Selected">
                        <asp:ListItem Value="1" Text="TextBox"></asp:ListItem>
                        <asp:ListItem Value="2" Text="CheckBox"></asp:ListItem>
                    </asp:DropDownList>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdatePanel ID="Update_Panel_Controles" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Panel ID="Panel_Controles" runat="server">
                    </asp:Panel>
                </ContentTemplate>
            </asp:UpdatePanel>
            <asp:UpdatePanel ID="Update_Panel_Button" runat="server" UpdateMode="Conditional">
                <ContentTemplate>
                    <asp:Button ID="BTN_Get_Valor" runat="server" Text="Pegar Valor Controle" OnClick="BTN_Get_Valor_Click" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>
    </html>

    Codigo metodos da pagina cs

     protected void DDL_Criar_Controle_Selected(object sender, EventArgs e)
        {
            if (DDL_Criar_Controle.SelectedItem.Value == "1")
            {
                criar_controle_textbox();
            }
            else if (DDL_Criar_Controle.SelectedItem.Value =="2")
            {
                criar_controle_checkbox();
     
            }
        }
        void criar_controle_textbox()
        {
            TextBox txt_control = new TextBox();
            txt_control.ID = "txt_control";

            Panel_Controles.Controls.Add(txt_control);
            Update_Panel_Controles.Update();
     
        }
        void criar_controle_checkbox()
        {
            CheckBox chk_control = new CheckBox();
            chk_control.ID = "chk_control";
            Panel_Controles.Controls.Add(chk_control);

            Update_Panel_Controles.Update();
     
        }

        protected void BTN_Get_Valor_Click(object sender, EventArgs e)
        {
            string valor = "";
            if (DDL_Criar_Controle.SelectedItem.Value == "1")
            {
                valor = getRespostaControle("txt_control");
            }
            else if(DDL_Criar_Controle.SelectedItem.Value == "2")
            {
                valor = getRespostaControle("chk_control");
            }
            ScriptManager.RegisterStartupScript(Page, typeof(Page), "Atencao", "alert('"+valor+"');", true);
        }

        public string getRespostaControle(string ctrlPrefix)
        {
            string ctrlValue = "";
            string[] ctrls = this.Page.Request.Form.ToString().Split('&');
            for (int i = 0; i < ctrls.Length; i++)
            {
                string teste = ctrls[i].ToString();

                if (ctrls[i].ToString().IndexOf(ctrlPrefix) > -1)
                {
                    string ctrlName = ctrls[i].Split('=')[0];
                    ctrlValue = ctrls[i].Split('=')[1];
                    ctrlValue = this.Page.Server.UrlDecode(ctrlValue);
                }
            }
            return ctrlValue;
        }

    Espero que ajude

    sexta-feira, 14 de dezembro de 2012 13:43
  • Cara,

    Conforme os exemplos do nosso amigo ai em cima, não é só apenas gerar os componentes, se precisa que ele esteja associado a outro como por exemplo dentro de um painel, precisa adiciona-lo dentro do Painel:

    Panel_Controles.Controls.Add(MeuTextAqui);
    Panel_Controles.Controls.Add(MinhaLabelAqui);

    Atenciosamente,
    Samuel dos Anjos

    Atenciosamente, Samuel dos Anjos

    sexta-feira, 14 de dezembro de 2012 21:35