根据来自另一个下拉列表的选择,通过LINQ填充下拉列表

时间:2013-03-26 16:25:56

标签: c# asp.net html 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);
        }
    }

2 个答案:

答案 0 :(得分: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 });
    .....
}

答案 1 :(得分: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; }

    }
}