none
DropdownList trazendo registro que foi salvo no banco RRS feed

  • Pergunta

  • Olá Pessoal !!

    Estou no VS 2008 framework 3.5 com C#, tenho dois Dropdownlists (UF e cidade), estou conseguindo salvá-los normalmente, o problema está sendo quando resgato o registro do banco para colocar o estado e a cidade na posição selecionada no dropdownlist,

    estou pecando em alguma propriedade que o DDL tem mas não consigo usar....

    Obs. gravo no banco o Id da cidade, onde já estava vinculado o id do estado pertencente...
    desde já agradeço.
    quinta-feira, 6 de agosto de 2009 15:00

Respostas

  • Olá !!
    Consegui.............

    depois da colaboração de vocês consegui fazer a coisa certa para resolver meu problemas, tudo com  uma linha de comando:

    ddlEstado.Items.FindByValue(

     

    Convert.ToString(cidade.Id)).Selected = true;

    Valeu gente...
    Até mais !!!
    • Marcado como Resposta LzNando13 segunda-feira, 10 de agosto de 2009 17:46
    • Editado LzNando13 segunda-feira, 10 de agosto de 2009 17:48
    segunda-feira, 10 de agosto de 2009 17:45

Todas as Respostas

  • Bom,
    você jah deve ter a sua query pronta
    jah deve saber os valores que você vai colocar

    então,
    eu faço da seguinte maneira

    preencho o text, e o value do dropdown

    ex:

    ddlEstado.Text = p.getTxFilial().ToString();
    ddlEstado.Value = p.getCodEstado().ToString();

    ddlCidade.Text = p.getTxCidade().ToString();
    ddlCidade.Value = p.getCodCidade().ToString();

    abraço,


    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    quinta-feira, 6 de agosto de 2009 20:59
  • Olá,

    você pode usar a propriedade SelectedValue do asp:DropDownList.


    Ex:

    string idCidade = String.Empty; //recupera o Id da Cidade
    DropDownList1.SelectedValue = idCidade;

    Se houver valor correspondente, o item será selecionado. Se não, nada ocorrerá.

    Então, torna-se um boa prática, sempre testar se o valor que deverá ser atribuído no SelectedValue corresponde a algum item no DropDownList.
    Isto pode ser feito da seguinte forma:

    if(!DropDownList1.Items.Contains(listItem))
    {
       //faz algo fora do fluxo básico
       //o método Contais recebe um ListItem.
    }

    ou

    if(DropDownList1.Items.FindByValue("valor a ser procurado") == null)
    {
       //faz algo fora do fluxo básico
       //o método FindByValue recebe uma string.
    }

    Vale lembrar que para isto funcionar corretamente, é bom atentar para quais campos da fonte de dados ligada ao DataSource do DropDownList, está setada para os propriedades Text e Value do DropDownList.

    DropDownList1.DataTextField = "Coluna X"
    DropDownList1.DataValueField = "Coluna Y"

    Um abraço,


    "Muito mais crucial do que aquilo que sabemos ou deixamos de saber é aquilo que não queremos saber." (Eric Hoffer)
    sábado, 8 de agosto de 2009 22:52
  • Olá Pessoal !!
    Li cuidadosamente as dicas de vocês, e tentei implementar...mas continuo com os problemas, vocês conseguiram entender o que eu escrevi ?, Gostaria de quando clicar em determinado registro do cliente trazer como default no dropdown a sua Cidade, que já está salva na tabela do cliente pelo ID. e que daí consigo carregar e trazer dados através da BLL.

    O mais próximo que consegui chegar foi quando fiz o seguinte trecho:

    ddlCidade.SelectedItem.Text = cidade.NomeDaCidade;

    ddlEstado.SelectedItem.Text = estado.SiglaEstado;

     

    ddlCidade.SelectedItem.Value = Convert.ToString(cidade.Id);

    ddlEstado.SelectedItem.Value = Convert.ToString(estado.Id);



    POrém a opção aparece na index 0 do dropdown, e ainda repete a mesma cidade por exemplo nele, ou seja, é como se tivesse adcionado um novo item...
    desde já agradeço....
    continuarei tentando !!!
    segunda-feira, 10 de agosto de 2009 14:10
  • Ola,

    você deve proceder da seguinte maneira

    if (!IsPostBack)
    {
            int i;
    
            // Perfil
            string[,] perfis = Patrimonio.buscarPerfil();
    
            ListItem itemPerfil = new ListItem();
            itemPerfil.Value = "0";
            itemPerfil.Text = "-";
            ddlPerfil.Items.Add(itemPerfil);
    
            for (i = 0; i < perfis.GetLength(0); i++)
            {
                ListItem itens = new ListItem();
                itens.Value = perfis[i, 0].Trim();
                itens.Text = perfis[i, 1].Trim();
                ddlPerfil.Items.Add(itens);
            }
    }
    abraço,
    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    segunda-feira, 10 de agosto de 2009 14:28
  • Olá !!

    Então Leonardo...
    Desculpe a insistência, ah...esqueci de falar tbm que ainda não sou um expert em C#...

    mas então minha aplicação já tem as tabelas de cidade e estado. na´página eu faço:

    ObterCidades(){....

    ddlCidade.DataSource = cidadeBLL.ObterCidades(

    Convert.ToInt32(ddlEstado.SelectedItem.Value));

    ddlCidade.DataTextField =

    "NomeDaCidade";

    ddlCidade.DataValueField =

    "Id";

    ddlCidade.DataBind();
    ...}

    e o mesmo para estado...
    eu chamo esse metodo quando chamo um cliente e ele deixa disponivel o dropdown para realizar a mudança, caso o usuario queira mudar a cidade e o estado.

    onde tem problemas é que na hora de trazer a cidade para ficar exibida no dropdown,
    eu carrego o drop com esse método e depois procuro a cidade pelo selectedItem.Value e/ou selectedItem.Text...
    dái os problemas...

    será que estou fazendo certo os procedimentos...???

    A proposta que me apresentou não resolve meu 'problem', pois não preciso adicionar itens ao DDL...
    de qualquer maneira...obrigado

    Até !!!

    segunda-feira, 10 de agosto de 2009 14:53
  • Olá !!
    Consegui.............

    depois da colaboração de vocês consegui fazer a coisa certa para resolver meu problemas, tudo com  uma linha de comando:

    ddlEstado.Items.FindByValue(

     

    Convert.ToString(cidade.Id)).Selected = true;

    Valeu gente...
    Até mais !!!
    • Marcado como Resposta LzNando13 segunda-feira, 10 de agosto de 2009 17:46
    • Editado LzNando13 segunda-feira, 10 de agosto de 2009 17:48
    segunda-feira, 10 de agosto de 2009 17:45