none
DropdownList selectedValue Não fica fixo RRS feed

  • Pergunta

  • Caros,

    Venho mais uma vez recorrer à ajuda de vocês.

    Estou com a seguinte situação.

    Eu tenho um dropdownList com a lista de várias pessoas, porém há nomes duplicados. Eu gostaria de utiliza-los pelo SelectedIndex, mas sempre que eu seleciono, por exemplo, o nome do index 303, em vez de o valor ser armazenado na variável, o valor referente ao primeiro index é guardado. Exemplo:

    300 - PAULO DE ASSIS NASCIMENTO
    301 - PAULO DE ASSIS NASCIMENTO
    302 - PAULO DE ASSIS NASCIMENTO
    303 - PAULO DE ASSIS NASCIMENTO

    Então, e preciso selecionar o index 303, então clico no último PAULO, mas na variável é armazenado o index 300.  Agora, o drop não é resetado, porque ele voltaria para o index 0;
    O controle utiliza AutoPostBack, e estou utilizando um data reader para preencher o dropdown. Mas mesmo tentando com um DataSource o problema também ocorreu.

     Obrigado.
    Paulo de Assis


    • Editado Paulo de Assis segunda-feira, 13 de janeiro de 2014 18:57 compementar
    segunda-feira, 13 de janeiro de 2014 18:47

Respostas

  • Olá Paulo,

    você não precisa de 2 DopDownList Para fazer isso, basta você carregar o nome na propriedade TEXT e o cpf na propriedade VALUE do componente. Para recuperar o valor do cpf selecionado você usa o DopDownList1.SelectedValue. Exemplo (VB.NET) utilizando DataReader para carregar o DropDownList:

    Dim i As Integer = 0 Try conexao.Open() Dim leia As MySqlDataReader = comando.ExecuteReader DropDownList1.Items.Clear() If leia.HasRows() Then While leia.Read() DropDownList1.Items.Add(leia.Item("nome")) DropDownList1.Items.Item(i).Value = leia.Item("cep") i += 1 End While

    End If Catch ex As Exception alert.ShowMessage(ex.Message) Finally conexao.Close() End Try


    Qualquer dúvida posta ae.

    Wennder




    • Editado Wennder SantosMVP segunda-feira, 13 de janeiro de 2014 19:26
    • Marcado como Resposta Giovani Cr terça-feira, 21 de janeiro de 2014 13:49
    segunda-feira, 13 de janeiro de 2014 19:24

Todas as Respostas

  • Olá Paulo pra ler o valor seria usar a propriedade SelectedValue que lhe retorna o valor ! Mas está meio vago mostre o código para podermos te auxiliar melhor.
    segunda-feira, 13 de janeiro de 2014 19:01
  • Mostre como você popula o DropDown.
    segunda-feira, 13 de janeiro de 2014 19:12
  • Olá Paulo...

    Fiz um Exemplo espero que ajude, pois sem ver o código não consegui entender direito, se meu exemplo não ajudar poste o código que eu ajudo novamente

    Exemplo:

    <body>
        <form id="form1" runat="server">
            <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_SelectedIndexChanged"></asp:DropDownList>
        </form>
    </body>


    .cs

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                { 
                    //preenche o DropDownList
                    ddl.Items.Add(new ListItem("300 - PAULO DE ASSIS NASCIMENTO","300"));
                    ddl.Items.Add(new ListItem("301 - PAULO DE ASSIS NASCIMENTO","301"));
                    ddl.Items.Add(new ListItem("302 - PAULO DE ASSIS NASCIMENTO","302"));
                    ddl.Items.Add(new ListItem("303 - PAULO DE ASSIS NASCIMENTO","303"));
                }
            }
    
            protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
            {
                int valor = ddl.SelectedIndex;
            }

    veja se provavelmente no postback , evento pageLoad não esta chamando novamente o método que carrega o dropdownlist. Lembrando que o sectedIndex sempre começa com o valor 0, entao se voce selecionar o primeiro item do dropdown o index dele vai ser zero, o segundo item vai ser 1 e assim por diante.

    Se esta resposta foi util vote nela para que este topico ajude outras pessoas T+ abraço..


    segunda-feira, 13 de janeiro de 2014 19:13
  • Tudo segue o código abaixo

       Ele preeche dois dropdownlists um com os nomes e outro com os CPFs. Então, encontro entre os nomes, 4 PAULO DE ASSIS NASCIMENTO, mas todos com CPF diferente.
    Como o valor é string, então se eu fizer um select matricula from funconario where nomefuncionario like "drpNome.selectedvalue" eu vou receber as matriculas dos 4 Paulos. Então pensei: Vou criar outro dropdownlist para os CPFs, e quando eu selecionar um PAULO desses, vou ppegar o SelectedIndex dele e associar com o dropdownlist de cpfs.
    drpCpf.SelectedIndex=drpNome.SelectedIndex

    mas sempre eu volto para o primeiro PAULO da lista.

    se trata de uma aplicação baseada em WebForms

        protected void preencherDropDown(int coluna, string conString,string selectComand,DropDownList drp, DropDownList drpcpf)
            {
                conexao.ConnectionString = conexaoString;
                comando.CommandText = selectComand; 
                comando.Connection = conexao;
                try
                {
                    conexao.Open();
                    reader = comando.ExecuteReader();
                    drp.Items.Add("SELECIONE UM COLABORADOR");
                    drpCpf.Items.Add(" ");
                    while (reader.Read())
                    {
                        drp.Items.Add(reader.GetValue(coluna).ToString());
                        drpcpf.Items.Add(reader.GetValue(Convert.ToInt32("2")).ToString());
                        drp.DataTextField = reader[coluna + 1].ToString();
                        drp.DataValueField = reader[coluna + 1].ToString();
                     
                    }
                }
                catch
                {
    
                    string mens = "Não foi possível conectar ao servidor do DP. VocÊ pode continuar a avaliação manualmente se desejar. Caso contrário, entre em contato com a TI.";
                    ClientScript.RegisterStartupScript(this.GetType(), "PRR-AVISO", "alert('" + mens + "');", true);
                    drpAvaliado.Visible = false;
                    drpAvaliado.Enabled = false;
                    txtData.ReadOnly = false;
                    
                    txtLoja.ReadOnly = false;
                    txtNomeTemporario.Enabled = true;
                    txtNomeTemporario.Visible = true;
                }
                finally
                {
                    conexao.Close();
                }
               
            

    segunda-feira, 13 de janeiro de 2014 19:15
  • Olá Paulo,

    você não precisa de 2 DopDownList Para fazer isso, basta você carregar o nome na propriedade TEXT e o cpf na propriedade VALUE do componente. Para recuperar o valor do cpf selecionado você usa o DopDownList1.SelectedValue. Exemplo (VB.NET) utilizando DataReader para carregar o DropDownList:

    Dim i As Integer = 0 Try conexao.Open() Dim leia As MySqlDataReader = comando.ExecuteReader DropDownList1.Items.Clear() If leia.HasRows() Then While leia.Read() DropDownList1.Items.Add(leia.Item("nome")) DropDownList1.Items.Item(i).Value = leia.Item("cep") i += 1 End While

    End If Catch ex As Exception alert.ShowMessage(ex.Message) Finally conexao.Close() End Try


    Qualquer dúvida posta ae.

    Wennder




    • Editado Wennder SantosMVP segunda-feira, 13 de janeiro de 2014 19:26
    • Marcado como Resposta Giovani Cr terça-feira, 21 de janeiro de 2014 13:49
    segunda-feira, 13 de janeiro de 2014 19:24