十二、CascadingDropDown——级联下拉列表
? CascadingDropDown级联下拉列表,就是一个无刷新的多级联动。 ? 举例如下: 这里用一个三级联动的例子说明,其它的二级或更多级的联动都很容易了。 1.?????? 添加一个ScriptManage 2.?????? 添加三个DropDownList和三个CascadingDropDown,每个DropDownList都需要对应一个CascadingDropDown ??????? <cc1:CascadingDropDown ID="CascadingDropDown_1" runat="server" ???????????? ??????????????????TargetControlID="DropDownList_1"??????? //对应的下拉框表控件的ID ?????????????????????????????? ServicePath="CascadingDropDown.asmx"??????? //要调用的web服务 ?????????????????????????????? ServiceMethod="getListItems"??????? //要调用的web服务的方法 ????????????? ?????????????????Category="一级"??????? //当前下拉列表的类型 ?????????????????????????????? LoadingText="正在加载一级列表。。。"??????? //正在加载时显示的文本 ?????????????????????????????? PromptText="请选择一级列表">??????? //当下拉列表中无数据或没有选择数据时给用户的提示 ??????? </cc1:CascadingDropDown> ??????? <asp:DropDownList ID="DropDownList_1" runat="server"> ??????? </asp:DropDownList> ??????? <cc1:CascadingDropDown ID="CascadingDropDown_2" runat="server" ?????????????????????????????? ParentControlID="DropDownList_1"??????? //对于联动的最上层下拉列表不需要这个参数,而其它的都需要 ??? ???????????????????????????TargetControlID="DropDownList_2" ?????????????????????????????? ServicePath="CascadingDropDown.asmx" ?????????????????????????????? ServiceMethod="getListItems" ?????????????????????????????? Category="二级" ?????????????????????? ????????LoadingText="正在加载二级列表" ?????????????????????????????? PromptText="请选择二级列表"> ??????? </cc1:CascadingDropDown> ??????? <asp:DropDownList ID="DropDownList_2" runat="server"> ??????? </asp:DropDownList> ??????? <cc1:CascadingDropDown ID="CascadingDropDown_3" runat="server" ?????????????????????????????? ParentControlID="DropDownList_2" ?????????????????????????????? TargetControlID="DropDownList_3" ?????????????????????????????? ServicePath="CascadingDropDown.asmx" ?????????????????????????????? ServiceMethod="getListItems" ?????????????????????????????? Category="三级" ?????????????????????????????? LoadingText="正在加载三级列表" ?????????????????????????????? PromptText="请选择三级列表"> ??????? </cc1:CascadingDropDown> ??????? <asp:DropDownList ID="DropDownList_3" runat="server"> ??????? </asp:DropDownList> 3.?????? 编写web服务 <%@ WebService Language="C#" Class="AjaxToolkit.CascadingDropDown" %> using System; using System.Collections; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; ? namespace AjaxToolkit { ??? /// <summary> ??? ///CascadingDropDown 的摘要说明 ??? /// </summary> ??? [WebService(Namespace = "http://tempuri.org/")] ??? [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] ??? //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 ??? [System.Web.Script.Services.ScriptService] ??? public class CascadingDropDown : System.Web.Services.WebService ??? { ??????? public CascadingDropDown() ??????? { ??????????? //如果使用设计的组件,请取消注释以下行 ??????????? //InitializeComponent(); ??????? } ? ??????? [WebMethod] ??????? public AjaxControlToolkit.CascadingDropDownNameValue[] getListItems(string knownCategoryValues,string category)??????? //必须使用CascadingDropDownNameValue数组返回 ??????? { ??????????? System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue> cdnvs = ??????????????? new System.Collections.Generic.List<AjaxControlToolkit.CascadingDropDownNameValue>(); ? ??????????? System.Threading.Thread.Sleep(1 * 1000);?? //延时一秒 ??????????? System.Collections.Specialized.StringDictionary kv = AjaxControlToolkit.CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); ??//获取下拉列表值 ??????????? if (category == "一级") ??????????? { ??????????????? for (int i = 0; i < 6; i++) ??????????????? { ??????????????????? string name = category + "_" + i.ToString(); ??????????????????? string value = "1_" + i.ToString(); ??????????????????? cdnvs.Add(new AjaxControlToolkit.CascadingDropDownNameValue(name,value)); ??????????????? } ??????????? } ??????????? else if (category == "二级") ??????????? { ??????????????? for (int i = 0; i < 6; i++) ???????? ???????{ ??????????????????? string name = "二级_" + i.ToString(); ??????????????????? string value = kv["一级"].ToString() + "_" + i.ToString();??? //因为kv是ICollection接口,所以必须使用[“”]方法读取数据,其中“”是CascadingDropDown属性中的Category ??????????????????? cdnvs.Add(new AjaxControlToolkit.CascadingDropDownNameValue(name,value)); ??????????????? } ??????????? } ??????????? else if (category == "三级") ??????????? { ??????????????? for (int i = 0; i < 6; i++) ??????????????? { ??????????????????? string name = "三级_" + i.ToString(); ??????????????????? string value = kv["二级"].ToString() + "_" + i.ToString(); ??????????????????? cdnvs.Add(new AjaxControlToolkit.CascadingDropDownNameValue(name,value)); ??????????????? } ??????????? } ??????????? ??????????? return cdnvs.ToArray<AjaxControlToolkit.CascadingDropDownNameValue>();?????? //返回CascadingDropDownNameValue类型数组 ??????? } ??? } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |