2013-03-26 94 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; } 

    } 
} 
相關問題