Usuário com melhor resposta
DropDownList - Como usar?

Pergunta
-
Bom dia pessoal, esta é minha primeira dúvida em asp .net que estou postando. Por ser novo aqui, pretendo ajudar a galera com o que eu puder também.
Vamos a dúvida:
No meu banco SQL tenho uma table "tb_pais"
Na minha página cad-cli.aspx inseri um dropdownlist e tentei popular inserindo seu método na Page_Load.
Ex:
private void CarregaDados()
{
Cadastro_Pais pais = new Cadastro_Pais();
ddlpais.DataSource = pais.GetAllPais();
ddlpais.DataBind();
ddlpais.Items.Insert(0, " ");
ddlpais.SelectedIndex = 0;
//Fim do procedimento + Populando a DDL País
//Populando a DDL País
//Fim do procedimento + Populando a DDL País
}Na Page_Load eu coloquei :
if (!IsPostBack)
{
CarregaDados();
}Agora vamos a dúvida:
Quando abro a página pela 1ª vez "IsPostBack" é false, então ele lê o Método CarregaDados e popula meu DropDown, neste momento eu começo o cadastro do cliente como teste.
Seleciono o país Brasil. Agora clico em salvar, se eu colocar o Debug ele vai rodar de novo a Page_Load antes de rodar o método Save, então neste momento IsPostBack é true, então ele não lê o método CarregaDados e assim ele zera meu dropDownList, alguém poderia me auxiliar por favor?
desde já muito obrigado.
Respostas
-
vc deve popular seu dropdownlist só na primeira vez no postback = false seu if fica assim
o ideal é mesmo vc colocar um indice 0 tipo -- selecione um pais --
vc testa se o selecteditem é = 0 ai quer dizer que o usuário nao selecionou nenhum item.
if(! page.ispostback)
{
popula o dropdownlist
}
Junior
- Marcado como Resposta Douglas Bertelli quinta-feira, 17 de maio de 2012 19:40
-
isso ai vc faz no proprio componente vai em itens e adiciona o item 0 noa precisa fazer como vc esta fazendo deixa so ate o databind
no seu postback vc colocou page.ispostback ? pq no que vc colocou aqui vc so tem assim !postback
O importante é vc deixar ele carregando o dropdownlist so na primeira vez da página assim
protected void Page_Load(object sender, EventArgs e) { int entid = Convert.ToInt32(Session["entid"]); if (!Page.IsPostBack) { Ddl_Perfil.DataSource = from p in context.TB_PER_PERFIL orderby p.PER_NOME select new { p.PER_CODIGO, p.PER_NOME }; Ddl_Perfil.DataTextField = "PER_NOME"; Ddl_Perfil.DataValueField = "PER_CODIGO"; Ddl_Perfil.DataBind(); } }
Junior
- Marcado como Resposta Douglas Bertelli quinta-feira, 17 de maio de 2012 20:29
Todas as Respostas
-
vc deve popular seu dropdownlist só na primeira vez no postback = false seu if fica assim
o ideal é mesmo vc colocar um indice 0 tipo -- selecione um pais --
vc testa se o selecteditem é = 0 ai quer dizer que o usuário nao selecionou nenhum item.
if(! page.ispostback)
{
popula o dropdownlist
}
Junior
- Marcado como Resposta Douglas Bertelli quinta-feira, 17 de maio de 2012 19:40
-
Oi Junior obrigado pelo retorno.
No page_load eu fiz ->
Cadastro_Pais pais = new Cadastro_Pais();
ddlpais.DataSource = pais.GetAllPais();
ddlpais.DataBind();
ddlpais.Items.Insert(0, " ");
ddlpais.SelectedIndex = 0;
Já coloquei na posição 0 não entendi ao certo o que quis dizer =\
-
isso ai vc faz no proprio componente vai em itens e adiciona o item 0 noa precisa fazer como vc esta fazendo deixa so ate o databind
no seu postback vc colocou page.ispostback ? pq no que vc colocou aqui vc so tem assim !postback
O importante é vc deixar ele carregando o dropdownlist so na primeira vez da página assim
protected void Page_Load(object sender, EventArgs e) { int entid = Convert.ToInt32(Session["entid"]); if (!Page.IsPostBack) { Ddl_Perfil.DataSource = from p in context.TB_PER_PERFIL orderby p.PER_NOME select new { p.PER_CODIGO, p.PER_NOME }; Ddl_Perfil.DataTextField = "PER_NOME"; Ddl_Perfil.DataValueField = "PER_CODIGO"; Ddl_Perfil.DataBind(); } }
Junior
- Marcado como Resposta Douglas Bertelli quinta-feira, 17 de maio de 2012 20:29
-
oi Jr. veja só como eu fiz:
no Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
PreencheEstados();
}
}--#####
Então logo em seguida criei o metodo "PreencheEstados
private void PreencheEstados()
{
Cadastro_Est estados = new Cadastro_Est();
ddlEstado.DataSource = estados.GetAllEstados();
ddlEstado.DataTextField = "nome_estado";
ddlEstado.DataValueField = "codigo";
ddlEstado.DataBind();
}ótimo, inseri na minha página o componente, e deixei "false" no AutoPostBack.
blz então.
em seguida inseri um btn na tela e um lbl.
Agora "debugando"...
abro a page, e ele passa lendo o metodo PreencheEstado, sendo assim meu ddl esta populado, agora clico no Btn e quando vou debugar ele realmente não está mais lendo o meu método PreencheEstado, porém os dados que estavam dentro do ddl somem.
-
-
Veja só as imagens que coloquei na tela.
imagem 1 ->
Agora quando clico no botão:
Meu Deus..enfim obrigado pela ajuda... não consegui resolver, mas entendi o que houve...a ddl perde sua ref. pq está dentro de uma Multiview cara, eu fiz os testes é colocar dentro da multiview e os dados se perdem, eu uso a Multiview para poder criar "guias" cadastro| seleção etc... bom vou descobrir outra maneira de criar guias.
Vlw.