none
DropDownList - Como usar? RRS feed

  • 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.

    quinta-feira, 17 de maio de 2012 15:25

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

    quinta-feira, 17 de maio de 2012 17:39
  • 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

    quinta-feira, 17 de maio de 2012 19:43

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

    quinta-feira, 17 de maio de 2012 17:39
  • 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 =\


    quinta-feira, 17 de maio de 2012 19:29
  • 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

    quinta-feira, 17 de maio de 2012 19:43
  • 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.

     
    quinta-feira, 17 de maio de 2012 20:35
  • 

     Veja só as imagens que coloquei na tela.

    imagem 1 ->

    no Load_Page

    Agora quando clico no botão:

    quinta-feira, 17 de maio de 2012 21:09
  • 

     Veja só as imagens que coloquei na tela.

    imagem 1 ->

    no Load_Page

    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.

    quinta-feira, 17 de maio de 2012 23:35