Inquiridor
Duvida com montar controle em tempo de execução

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 é
Todas as Respostas
-
-
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
-
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 AnjosAtenciosamente, Samuel dos Anjos
- Sugerido como Resposta Samuel Rodrigues dos Anjos sexta-feira, 21 de dezembro de 2012 18:10