使用AjaxControlToolkit中的CascadingDropDown进行联动。
aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs" Inherits="下拉框关联.WebForm3" EnableEventValidation="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<ajaxToolkit:ToolkitScriptManager EnablePartialRendering="true" runat="server" ID="ScriptManager1" />
游戏:
<asp:DropDownList ID="gameList" runat="server"></asp:DropDownList>
<asp:DropDownList ID="gameServiceList" runat="server"></asp:DropDownList>
<ajaxToolkit:CascadingDropDown
ID="CascadingDropDown1"
runat="server"
TargetControlID="gameList"
Category="Game"
PromptText="请选择一个游戏"
ServicePath="GetCascadeService.asmx"
ServiceMethod="GetGameList" />
<ajaxToolkit:CascadingDropDown
ID="CascadingDropDown2"
runat="server"
TargetControlID="gameServiceList"
ParentControlID="gameList"
PromptText="请选择一个区服"
ServiceMethod="GetGameServiceList"
ServicePath="GetCascadeService.asmx"
Category="GameService" />
<asp:Button ID="Button1" runat="server" Text="Button" οnclick="Button1_Click" />
</div>
</form>
</body>
</html>
GetCascadeService.asmx
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using AjaxControlToolkit;
using System.Data;
namespace 下拉框关联
{
/// <summary>
/// GetCascadeService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
[System.Web.Script.Services.ScriptService]
public class GetCascadeService : System.Web.Services.WebService
{
[WebMethod]
public CascadingDropDownNameValue[] GetGameList(string knownCategoryValues, string category)
{
System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue> list = new System.Collections.Generic.List<CascadingDropDownNameValue>();
IEnumerable<Game> Igame = GetAllGameList();
foreach (Game game in Igame)
{
list.Add(new CascadingDropDownNameValue(game.Name, game.Id.ToString()));
}
return list.ToArray();
}
[WebMethod]
public CascadingDropDownNameValue[] GetGameServiceList(string knownCategoryValues, string category)
{
System.Collections.Specialized.StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);//获取上一级选择的值
System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue> list = new System.Collections.Generic.List<CascadingDropDownNameValue>();
int serviceId;
if(!kv.ContainsKey("Game")||!Int32.TryParse(kv["Game"],out serviceId)) return null;
DataRow[] arrayRow = getAllGameService().Select("serviceId="+serviceId);
foreach (DataRow row in arrayRow)
{
list.Add(new CascadingDropDownNameValue(row["Name"].ToString(), row["Id"].ToString()));
}
return list.ToArray();
}
#region=========↓测试数据↓====================================================================================================
private IEnumerable<Game> GetAllGameList()
{
for (int i = 1; i < 11; i++)
{
yield return new Game
{
Id = i,
Name = string.Format("游戏{0}", i)
};
}
}
private struct Game
{
public string Name { get; set; }
public int Id { get; set; }
}
private DataTable getAllGameService()
{
System.Data.DataTable table = new System.Data.DataTable("GameServerce");
table.Columns.Add("Id", typeof(Int32));
table.Columns.Add("ServiceId", typeof(Int32));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(new object[] { 1, 1, "游戏1区服1" });
table.Rows.Add(new object[] { 2, 1, "游戏1区服2" });
table.Rows.Add(new object[] { 3, 2, "游戏2区服1" });
table.Rows.Add(new object[] { 4, 2, "游戏2区服2" });
table.Rows.Add(new object[] { 5, 2, "游戏2区服3" });
table.Rows.Add(new object[] { 6, 3, "游戏3区服1" });
table.Rows.Add(new object[] { 7, 3, "游戏3区服2" });
table.Rows.Add(new object[] { 8, 4, "游戏4区服1" });
table.Rows.Add(new object[] { 9, 5, "游戏5区服1" });
table.Rows.Add(new object[] { 10, 6, "游戏6区服1" });
table.Rows.Add(new object[] { 11, 7, "游戏7区服1" });
return table;
}
#endregion
}
}