Usuário com melhor resposta
Selecionando no Dropdown.

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º LugarO 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
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- Marcado como Resposta Eder CostaModerator quinta-feira, 30 de dezembro de 2010 21:25
Todas as Respostas
-
-
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,
-
-
-
-
-
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,
- Sugerido como Resposta Eder CostaModerator quinta-feira, 30 de dezembro de 2010 21:26
-
-
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- Marcado como Resposta Eder CostaModerator quinta-feira, 30 de dezembro de 2010 21:25