none
DropDownList dentro do ListView RRS feed

  • Pergunta

  • Galera,

    Ainda estou tendo problemas nesse desenvolvimento,

    Conseguei fazer o ListView ser exibido com o dropdownlist dentro carregado com alguns valores do banco, mas na hora de salvar o SelectedValue do Dropdownlist ele vem em branco minha conclusão porque isto acontece e:

    depois que o meu datasource dos dropdownlist são passados dentro do evento ListView_ItemCreated

    dessa forma...

    protected void ListView1_ItemCreated(object sender, ListViewItemEventArgs e)
        {

            ListViewItem item = e.Item;

                 

            if (item.ItemType == ListViewItemType.InsertItem)
            {
                DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");
                ddl.DataSource = dt;
                ddl.DataTextField = "nome_prestador";
                ddl.DataValueField = "id_prestador";
                ddl.DataBind();


               
                DropDownList ddlClientes = (DropDownList)item.FindControl("ddlClientes");
                ddlClientes.DataSource = dtClient;
                ddlClientes.DataTextField = "nome_cliente";
                ddlClientes.DataValueField = "id_cliente";
                ddlClientes.DataBind();
            }


        }

    Na primeira vez para exibir a pagina tudo bem, mas quando clico para salvar o registro(coloquei no debug pra ver o que acontece e o event ListView ItemCreate e chamado primeiramente assim associando novamente o datatable para os datasource dos meus drops dai quando eu vou recuperar os valores selcionados mais abaixo do codigo vem vazio..)

    O que eu acho que deveria ser feito para dar certo e conseguir recuperar os valores selecionados nos drops são que eles deveriam ser associados ao datasource somente uma vez correto?

    Sem acontecer essa interferencia que esta ocorrendo com o evento ItemCreated, mas não achei outra maneira que de certo para preencher os drops

    usando esta sequencia.

    ListViewItem item = e.Item;

    DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");

    Se alguem conseguir me dar uma luz ficarei mto grato.

    quarta-feira, 22 de fevereiro de 2012 00:30

Todas as Respostas

  • Olá! Bom dia!!

       Segue exemplo de como fiz em uma aplicação que usa o listview para editar e adicionar dados, no meu exemplo uso um controle radiobuttonlist, mas é bem similar com o uso de dropdownlist.


       Identificar a linha que está em edição:

            protected void ListView1_ItemEditing(object sender, ListViewEditEventArgs e)  // identificar linha que estou editando
            {
                ListView1.EditIndex = e.NewEditIndex;
            }


        Setar o valor selecionado quando for insert:

    protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e)
            {
                RadioButtonList RBLAtivo;
                Int16 x;
    
                RBLAtivo = (RadioButtonList)ListView1.InsertItem.FindControl("tipo_valorRadioButtonList");
                if (RBLAtivo.SelectedValue == "")
                    return;
                x = Convert.ToInt16(RBLAtivo.SelectedValue);
                e.Values["tipo_valor"] = x;
    
            }

        Setar o valor selecionado quando for update do registro:

            protected void ListView1_ItemUpdating(object sender, ListViewUpdateEventArgs e)
            {
                RadioButtonList RBLAtivo;
                Int16 x;
    
                RBLAtivo = (RadioButtonList)ListView1.EditItem.FindControl("tipo_valorRadioButtonList");
                if (RBLAtivo.SelectedValue == "")
                    return;
                x = Convert.ToInt16(RBLAtivo.SelectedValue);
                e.NewValues["tipo_valor"] = x;
            }

        Selecionar o valor no radiobuttonlist de acordo com o registro do banco de dados:

            protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
            {
    
                if (e.Item.ItemType == ListViewItemType.DataItem)  // validar se é linha de edição (item)
                {
                    RadioButtonList rbl = (RadioButtonList)e.Item.FindControl("tipo_valorRadioButtonList");  // convertendo para radiobuttonlist
    
    
                    if (rbl != null)
                    {
                        Label lblTemp = (Label)ListView1.Items[ListView3.EditIndex].FindControl("tipo_valor_descLabel");
    
                        if (lblTemp.Text.ToUpper() == "TRUE")
                            rbl.SelectedValue = "1";
                        else
                            rbl.SelectedValue = "2";
                    }
                }
            }

       Espero ter lhe ajudado!
       Se lhe foi útil, marque como resposta / vote como útil! Obrigado!!


    Thiago Rogerio
    www.thiagorogerio.com.br
    thiagorogeriobr@hotmail.com

    quarta-feira, 22 de fevereiro de 2012 13:11
  • Ola,

    Eu já tinha pelo evento ItemDataBound mas quando eu vou associar o datasource do meu ddl ao datatable ele da erro 

    o problema dessa forma e que não consigo instanciar o meu dropdownlist com esse evento tentei dessas duas formas uma esta comentada veja:

    Referência de objeto não definida para uma instância de um objeto.

    protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            string sDropDown;
            ListViewItem item = e.Item;
            if (item.ItemType == ListViewItemType.DataItem)
            {
                //DropDownList ddl = (DropDownList)item.FindControl("ddlPrestadores");
                DropDownList ddl = (DropDownList)ListView1.FindControl("ddlPrestadores");
                if (ddl != null)
                {
                    //ddl.DataSource = ds.Tables["Prestadores"];
                    ddl.DataSource = dt;
                    ddl.DataTextField = "nome_prestador";
                    ddl.DataValueField = "id_prestador";
                    ddl.DataBind();
                }


                sDropDown = ddl.SelectedValue;

                DropDownList ddlClientes = (DropDownList)item.FindControl("ddlClientes");
                //ddlClientes.DataSource = ds.Tables["Clientes"];
                ddlClientes.DataSource = dtClient;
                ddlClientes.DataTextField = "nome_cliente";
                ddlClientes.DataValueField = "id_cliente";
                ddlClientes.DataBind();
            }
        }

    Somente deu certo dentro do evento ItemCreated

    quarta-feira, 22 de fevereiro de 2012 14:25
  • Olá!

       Procure o dropdownlist no e.item, conforme exemplo abaixo:

    DropDownList rbl = (DropDownList)e.Item.FindControl("ddlPrestadores"); 

       Verifique se assim encontra.

    Thiago Rogerio
    www.thiagorogerio.com.br
    thiagorogeriobr@hotmail.com

    quarta-feira, 22 de fevereiro de 2012 14:55
  • Também não funcionou,

    Antes eu tinha feito isso para diminuir um pouco ListViewItem item = e.Item;

    dai comentei e testei como vc falou mas não funcionou..

    Não sei porque isso acontece, se eu tentar criar a instancia do drop no evento ItemCreated da certo mas depois quando eu vou salvar o registro na hora de recuperar o SelectedValue ele vem branco

    Não esta querendo fazer isso no evento ItemCreated porque acho q o motivo de ele pegar o SelectedValue em branco toda vez e porque depois que clico no botão para inserir o registro o evento ItemCreated e chamado sem ser preciso, assim fazendo associação novamente do datatable ao datasource.

    Teria como cancelar a chamada de um evento quando eu quiser??

    quarta-feira, 22 de fevereiro de 2012 15:07