none
Selecionando no Dropdown. RRS feed

  • Pergunta

  • Bom Dia.

    Seguinte, tenho uma aplicação asp.net C#, e estou em um desenvolvimento de uma avaliação.

    Na minha página tenho 3 Dropdown's, que são carregados com dados do banco.

    Nessa minha página preciso selecionar 3 personalidades:

    1º Lugar
    2º Lugar
    3º Lugar

     

    O banco está me retornando 3 nomes para preencher esses 3 dropdown's, 1 personalidade em cada, certinho.
    Porém, do jeito que esta eu posso selecionar a mesma personalidade nos 3 dropdown's e não pode isso.

    Quero que ao selecionar "ciclano" no 1º dropdown, ele suma do 2º e do 3º consequentemente e sobre apenas o outros 2 nomes não selecionados até então. Como se fosse uma filtragem..

    Como posso fazer isso?

     

    Espero que tenham me entendido.
    Obrigado desde já.

    • Editado Progamador.C quarta-feira, 20 de outubro de 2010 12:19 erro
    quarta-feira, 20 de outubro de 2010 12:04

Respostas

  • A idéia é fazer as escolhas em cascata.
    Esse seria o ideal: http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/CascadingDropDown/CascadingDropDown.aspx


    Massss.... vai um exemplo mais básico. Como dito acima, varia de como você está fazendo o acesso ao banco.

    Page_Load só para carregar os dados de teste

     

    protected void Page_Load(object sender, EventArgs e)
     {
      if (!IsPostBack)
      {
       DataTable dtDados = new DataTable();
       dtDados.Columns.Add(new DataColumn("Codigo", typeof(string)));
       dtDados.Columns.Add(new DataColumn("Descricao", typeof(string)));
    
       DataRow dtRow0;
       dtRow0 = dtDados.NewRow();
       dtRow0["Codigo"] = "0";
       dtRow0["Descricao"] = "Selecione";
       dtDados.Rows.Add(dtRow0);
       
       DataRow dtRow;
       dtRow = dtDados.NewRow();
       dtRow["Codigo"] = "1";
       dtRow["Descricao"] = "Arroz";
       dtDados.Rows.Add(dtRow);
    
       DataRow dtRow2;
       dtRow2 = dtDados.NewRow();
       dtRow2["Codigo"] = "2";
       dtRow2["Descricao"] = "Feijão";
       dtDados.Rows.Add(dtRow2);
    
       DataRow dtRow3;
       dtRow3 = dtDados.NewRow();
       dtRow3["Codigo"] = "3";
       dtRow3["Descricao"] = "Batata";
       dtDados.Rows.Add(dtRow3);
    
       DropDownList1.DataSource = dtDados;
       DropDownList1.DataValueField = "Codigo";
       DropDownList1.DataTextField = "Descricao";
       DropDownList1.DataBind();
    
       Session["Dados"] = dtDados;
       Session["DadosTemp"] = dtDados;
      }
     }
    

     

     

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
     </asp:DropDownList>
     <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" Enabled="False"
      OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
     </asp:DropDownList>
     <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True" Enabled="False"
      OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged">
     </asp:DropDownList>
    

     

     

     

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
     {
      DropDownList2.Enabled = false;
      DropDownList3.Enabled = false;
    
      DropDownList2.DataSource = "";
      DropDownList3.DataSource = "";
      DropDownList2.DataBind();
      DropDownList3.DataBind();
    
      if (DropDownList1.SelectedIndex > 0)
      {
       DropDownList2.DataSource = Session["Dados"];
       DropDownList2.DataValueField = "Codigo";
       DropDownList2.DataTextField = "Descricao";
       DropDownList2.DataBind();
       DropDownList2.Items.Remove(DropDownList1.SelectedItem);
       Session["DadosTemp"] = DropDownList2.DataSource;
       DropDownList2.Enabled = true;
      }
     }
     protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
     {
      if (DropDownList2.SelectedIndex > 0)
      {
       DropDownList3.DataSource = Session["DadosTemp"];
       DropDownList3.DataValueField = "Codigo";
       DropDownList3.DataTextField = "Descricao";
       DropDownList3.DataBind();
       DropDownList3.Items.Remove(DropDownList2.SelectedItem);
       DropDownList3.Items.Remove(DropDownList1.SelectedItem);
       DropDownList3.Enabled = true;
      }
     }
    

     

     

     

     

     

     


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    http://sorumbaticoman.abadium.com
    quinta-feira, 28 de outubro de 2010 15:07

Todas as Respostas

  • Ninguém?
    quarta-feira, 20 de outubro de 2010 13:00
  • Boa tarde Amigo,

    Um jeito de fazer isso seria removendo os itens de um dropdownlist e adicionando de novo:

     protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
        {
          // Considerando que seus dropdowns chamam DDL,DDL2 e DDL3<br/>
     ddl2.Items.FindByValue(ddl.SelectedItem.Value).Enabled=false;<br/>
                ddl3.Items.FindByValue(ddl.SelectedItem.Value).Enabled = false; }
    

    Ai o que faltaria seria um metodo que da um foreach nos items do dropdown e volta os enabled para true, quando o usuario resolve mudar de ideia no primeiro dropdown.

    Obs: Quando o item esta diabled ( enable=false) ele não aparece, mas continua la ;)

    Abraços,

    quarta-feira, 20 de outubro de 2010 15:14
  • Fiz pelo menos a primeira parte e não funcionou.

    Não foi apagando os itens.

    quarta-feira, 20 de outubro de 2010 16:20
  • Amigo,

    Você adicionou autopostback="true" nos seus dropdownlist?

     

    Abraços,

    quarta-feira, 20 de outubro de 2010 16:33
  • Boa, tinha esquecido, vou testar denovo.

    HAHAHA

    quarta-feira, 20 de outubro de 2010 16:34
  • Funcionou.

     

    Agora como eu faria esse método com o foreach?

    Um método novo?

    Pra ele percorrer os dropdown's?

     

    Valeu mesmo cara.

    quarta-feira, 20 de outubro de 2010 16:41
  • Amigo,

    Eu acho que varia muito o tipo de lógica que você vai usar neh... mas acho que você pode tentar assim:

     protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
      {
       // Considerando que seus dropdowns chamam DDL,DDL2 e DDL3
    //Chama o metodo que preenche o dropDown2
    bindDDl2();
    // Seleciona o valor no dropdown2
     ddl2.Items.FindByValue(ddl.SelectedItem.Value).Enabled=false;
    //Mesma coisa em baixo
    bindDDl3();
    ddl3.Items.FindByValue(ddl.SelectedItem.Value).Enabled = false; 
    }
    
    

    Entendeu? se fizer assim, se o cara resolver voltar atras em um DDL ( dropdownList) os outros valores aparecem la tbm, mas dependendo do que vc esta fazendo com os metodos de binb aconteceriam requisições a mais do banco.

    Ou talvez se você adicionasse esse metodo no PageLoad você não precisaria adicionar em todos os grids...

    Bom, você deveria dar uma testada e olhar qual o melhor caso para você.

    Abraços,

    quarta-feira, 20 de outubro de 2010 17:08
  • Não deu muito certo não, ficou tudo doido. =/

    Eu seleciono em um, ele muda em outro. Não ta ficando fixa a minha seleção.

     

    quinta-feira, 21 de outubro de 2010 11:25
  • A idéia é fazer as escolhas em cascata.
    Esse seria o ideal: http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/CascadingDropDown/CascadingDropDown.aspx


    Massss.... vai um exemplo mais básico. Como dito acima, varia de como você está fazendo o acesso ao banco.

    Page_Load só para carregar os dados de teste

     

    protected void Page_Load(object sender, EventArgs e)
     {
      if (!IsPostBack)
      {
       DataTable dtDados = new DataTable();
       dtDados.Columns.Add(new DataColumn("Codigo", typeof(string)));
       dtDados.Columns.Add(new DataColumn("Descricao", typeof(string)));
    
       DataRow dtRow0;
       dtRow0 = dtDados.NewRow();
       dtRow0["Codigo"] = "0";
       dtRow0["Descricao"] = "Selecione";
       dtDados.Rows.Add(dtRow0);
       
       DataRow dtRow;
       dtRow = dtDados.NewRow();
       dtRow["Codigo"] = "1";
       dtRow["Descricao"] = "Arroz";
       dtDados.Rows.Add(dtRow);
    
       DataRow dtRow2;
       dtRow2 = dtDados.NewRow();
       dtRow2["Codigo"] = "2";
       dtRow2["Descricao"] = "Feijão";
       dtDados.Rows.Add(dtRow2);
    
       DataRow dtRow3;
       dtRow3 = dtDados.NewRow();
       dtRow3["Codigo"] = "3";
       dtRow3["Descricao"] = "Batata";
       dtDados.Rows.Add(dtRow3);
    
       DropDownList1.DataSource = dtDados;
       DropDownList1.DataValueField = "Codigo";
       DropDownList1.DataTextField = "Descricao";
       DropDownList1.DataBind();
    
       Session["Dados"] = dtDados;
       Session["DadosTemp"] = dtDados;
      }
     }
    

     

     

    <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
     </asp:DropDownList>
     <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" Enabled="False"
      OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged">
     </asp:DropDownList>
     <asp:DropDownList ID="DropDownList3" runat="server" AutoPostBack="True" Enabled="False"
      OnSelectedIndexChanged="DropDownList3_SelectedIndexChanged">
     </asp:DropDownList>
    

     

     

     

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
     {
      DropDownList2.Enabled = false;
      DropDownList3.Enabled = false;
    
      DropDownList2.DataSource = "";
      DropDownList3.DataSource = "";
      DropDownList2.DataBind();
      DropDownList3.DataBind();
    
      if (DropDownList1.SelectedIndex > 0)
      {
       DropDownList2.DataSource = Session["Dados"];
       DropDownList2.DataValueField = "Codigo";
       DropDownList2.DataTextField = "Descricao";
       DropDownList2.DataBind();
       DropDownList2.Items.Remove(DropDownList1.SelectedItem);
       Session["DadosTemp"] = DropDownList2.DataSource;
       DropDownList2.Enabled = true;
      }
     }
     protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
     {
      if (DropDownList2.SelectedIndex > 0)
      {
       DropDownList3.DataSource = Session["DadosTemp"];
       DropDownList3.DataValueField = "Codigo";
       DropDownList3.DataTextField = "Descricao";
       DropDownList3.DataBind();
       DropDownList3.Items.Remove(DropDownList2.SelectedItem);
       DropDownList3.Items.Remove(DropDownList1.SelectedItem);
       DropDownList3.Enabled = true;
      }
     }
    

     

     

     

     

     

     


    Fkaeh - Gambi.NET® Framework Certificated 2010
    ----------------------------------------------
    http://sorumbaticoman.abadium.com
    quinta-feira, 28 de outubro de 2010 15:07