2013-03-26 95 views
0

我一直在研究这个问题,它的工作原理。但是,在尝试从控制下拉列表中更改我的选项以查看应显示我的动态列表的下拉列表中的其他列表后,没有任何反应。它仍然显示以前的列表。我能得到一些帮助,这?:通过LINQ基于从另一个下拉列表中选择的内容填充下拉列表

这里是我的正面:

  <label for="ddlGift1">Gift #1</label> 
     <asp:DropDownList runat="server" ID="ddlGift1" class="gift" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" OnSelectedIndexChanged="ddlGift1_SelectedIndexChanged"> 
      <asp:ListItem Value="--" Text="Please Select" /> 
     </asp:DropDownList> 

     <label for="ddlFName1">Fund Name</label> 
     <asp:DropDownList runat="server" ID="ddlFName1" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" > 
      <asp:ListItem Value="--" Text="Please Select" /> 
     </asp:DropDownList> 


     <label for="ddlGift2">Gift #2</label> 
     <asp:DropDownList runat="server" ID="ddlGift2" class="gift" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" OnSelectedIndexChanged="ddlGift2_SelectedIndexChanged" > 
      <asp:ListItem Value="--" Text="Please Select" /> 
     </asp:DropDownList> 

     <label for="ddlFName2">Fund Name</label> 
     <asp:DropDownList runat="server" ID="ddlFName2" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" > 

     <label for="txtPAmount2">Pledge Amount</label> 
     <asp:TextBox runat="server" ID="txtPAmount2" CssClass="narrow" text="0.00" onClick="ComputeCosts();" ClientIDMode="Static" class="PAmount" />    

     <label for="ddlGift3">Gift #3</label> 
     <asp:DropDownList runat="server" ID="ddlGift3" class="gift" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" OnSelectedIndexChanged="ddlGift3_SelectedIndexChanged"> 
      <asp:ListItem Value="--" Text="Please Select" /> 
     </asp:DropDownList> 

     <label for="ddlFName3">Fund Name</label> 
     <asp:DropDownList runat="server" ID="ddlFName3" AutoPostBack="true" AppendDataBoundItems="True" ClientIDMode="Static" > 
      <asp:ListItem Value="--" Text="Please Select" /> 
     </asp:DropDownList> 

背面: 例一个功能:

private void SetCOB(DropDownList name) 
     { 
      var _db = (from a in _foundation.COB 
        orderby a.id 
        select new { a.id, a.name }); 

     name.DataSource = _db; 
     name.DataTextField = "name"; 
     name.DataValueField = "id"; 
     name.DataBind(); 
    } 
protected void ddlGift1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if(ddlGift1.SelectedValue == "41") 
     { 
      SetCOB(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "42") 
     { 
      SetCOLA(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "43") 
     { 
      SetCONHP(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "44") 
     { 
      SetOE(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "45") 
     { 
      SetCSEE(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "52") 
     { 
      SetA(ddlFName1); 
     } 
     else if (ddlGift1.SelectedValue == "54") 
     { 
      SetS(ddlFName1); 
     } 
    } 

    protected void ddlGift2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ddlGift2.SelectedValue == "41") 
     { 
      SetCOB(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "42") 
     { 
      SetCOLA(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "43") 
     { 
      SetCONHP(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "44") 
     { 
      SetOE(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "45") 
     { 
      SetCSEE(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "52") 
     { 
      SetA(ddlFName2); 
     } 
     else if (ddlGift2.SelectedValue == "54") 
     { 
      SetS(ddlFName2); 
     } 
    } 

    protected void ddlGift3_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     if (ddlGift3.SelectedValue == "41") 
     { 
      SetCOB(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "42") 
     { 
      SetCOLA(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "43") 
     { 
      SetCONHP(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "44") 
     { 
      SetOE(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "45") 
     { 
      SetCSEE(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "52") 
     { 
      SetA(ddlFName3); 
     } 
     else if (ddlGift3.SelectedValue == "54") 
     { 
      SetS(ddlFName3); 
     } 
    } 

回答

0

SetCOB方法需要查询的基础上下拉列表的选定的值。目前,它正在查询所有。

应该是这样的 -

protected void ddlGift1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if(ddlGift1.SelectedValue == "41") 
    { 
     SetCOB(41, ddlFName1); 
    } 
    ..... 
} 

private void SetCOB(int id, DropDownList name) 
{ 
    var _db = (from a in _foundation.COB 
     where a.id == id 
     orderby a.id 
     select new { a.id, a.name }); 
    ..... 
} 
+0

礼品的名单是从COB不同。它几乎是基于礼物中选择的项目的子列表。所以在这种情况下,将41传给COB不会有太大的好处,因为41中的礼物并不涉及到COB – Paradigm 2013-03-26 18:36:56

+0

中的内容。我不熟悉您的代码。基本上,一旦您选择了一个下拉列表,将该选定值传递给下一个下拉列表的数据源,该数据源将根据所选值进行查询。我在代码中看不到 - 这就是为什么你总是看到它仍然显示前面的列表。 '。 – Win 2013-03-26 18:42:40

+0

但所有的下拉列表都不同。作为主要下拉列表的礼物是唯一一个物品ID为41的基金下拉列表是我想更改的礼物 – Paradigm 2013-03-26 19:01:43

0

使用LINQ可以使第二个下拉列表数据源的条件选择,就像这个例子显示了基于使用LINQ查询选定的国家城市:

的HTML ASP.Net

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %> 

<!DOCTYPE html> 

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <style> 
     .required:after { 
      content: " * "; 
      font-weight: bold; 
      color: red; 
     } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <table> 
       <tr> 
        <td>Country:</td> 
        <td> 
         <asp:DropDownList ID="ddlCountries" runat="server" AutoPostBack="true" 
          OnSelectedIndexChanged="ddlCountries_SelectedIndexChanged"> 
         </asp:DropDownList> 
        </td> 
       </tr> 
       <tr> 
        <td>City:</td> 
        <td> 
         <asp:DropDownList ID="ddlCities" runat="server"> 
         </asp:DropDownList> 
        </td> 
       </tr> 
      </table> 
     </div> 
    </form> 
</body> 
</html> 

守则在C#的背后

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using WebApplication2.Models; 

namespace WebApplication2 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       GetData(); 

      } 
     } 

     private List<City> SetCityData() 
     { 
      List<City> cities = new List<City>() 
      { 
       new City() { Id = 1, CountryId = 2, CityName = "Amman" }, 
       new City() { Id = 1, CountryId = 2, CityName = "Zarqa" }, 
       new City() { Id = 1, CountryId = 4, CityName = "Istanbul" }, 
       new City() { Id = 1, CountryId = 4, CityName = "Ankara" }, 
       new City() { Id = 1, CountryId = 4, CityName = "Mersin" }, 
       new City() { Id = 1, CountryId = 4, CityName = "Trabzon" }, 
       new City() { Id = 1, CountryId = 1, CityName = "Rio de Janeiro" }, 
       new City() { Id = 1, CountryId = 3, CityName = "Los Angeles" }, 
       new City() { Id = 1, CountryId = 3, CityName = "Chicago" }, 
      }; 
      return cities; 
     } 

     protected void ddlCountries_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      int selectedCountry = Convert.ToInt32(ddlCountries.SelectedValue); 
      var cityByCountry = from c in SetCityData() 
           where c.CountryId == selectedCountry 
           select c; 
      ddlCities.DataSource = cityByCountry.ToList(); 
      ddlCities.DataTextField = "CityName"; 
      ddlCities.DataValueField = "Id"; 
      ddlCities.DataBind(); 
     } 

     private List<Country> SetCountries() 
     { 
      List<Country> countries = new List<Country>() 
      { 
       new Country() { Id = 1, CountryName = "Brazil" }, 
       new Country() { Id = 2, CountryName = "Jordan" }, 
       new Country() { Id = 3, CountryName = "USA" }, 
       new Country() { Id = 4, CountryName = "Turkey" } 
      }; 
      return countries; 
     } 

     private void GetData() 
     { 
      ddlCountries.DataSource = SetCountries(); 
      ddlCountries.DataTextField = "CountryName"; 
      ddlCountries.DataValueField = "Id"; 
      ddlCountries.DataBind(); 
     } 
    } 
} 

的国家和城市类

using System; 

namespace WebApplication2.Models 
{ 
    public class Country 
    { 
     public int Id { get; set; } 
     public string CountryName { get; set; } 
    } 
} 

using System; 

namespace WebApplication2.Models 
{ 
    public class City 
    { 
     public int Id { get; set; } 
     public int CountryId { get; set; } 
     public string CityName { get; set; } 

    } 
} 
相关问题