Usuário com melhor resposta
DropdownList selectedValue Não fica fixo

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
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
Todas as Respostas
-
-
-
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..
- Editado Gabriel S Mylla segunda-feira, 13 de janeiro de 2014 19:16
-
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.SelectedIndexmas 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(); }
-
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