Ajax CascadingDropDown控件实现级联下拉列表选择
(1).网页部分
<tr>
<tdvalign="top"style="WIDTH:86px;height:31px;">学 段:</td>
<tdstyle="height:31px">
<asp:DropDownListID="ddlb_xd"runat="server"DataTextField="name"DataValueField="id"
Width="128px"
>
</asp:DropDownList>
</td>
</tr>
<tr>
<tdvalign="top"style="WIDTH:86px;height:31px;">年 级:</td>
<tdstyle="height:31px">
<asp:DropDownListID="ddlb_Grade"runat="server"DataTextField="name"DataValueField="id"Width="128px">
</asp:DropDownList>
</td>
</tr>
<tr>
<tdvalign="top"style="WIDTH:86px;height:31px;">课 程:</td>
<tdstyle="height:31px">
<asp:DropDownListID="ddlb_CouseType"runat="server"DataTextField="name"DataValueField="id"Width="128px">
</asp:DropDownList>
</td>
</tr>
<tr>
<tdvalign="top"style="WIDTH:86px;height:31px;">扣 点:</td>
<tdstyle="height:31px">
<asp:DropDownListID="ddlb_NeedMoney"runat="server"DataTextField="MoneyText"DataValueField="MoneyValue"Width="128px">
</asp:DropDownList><fontstyle="color:#FF0000" >(扣点为0元的试题为免费试题)</font>
</td>
</tr>
<%--第1层的下拉选单--%>
<ajaxToolkit:CascadingDropDownID="CascadingDropDown1"runat="server"
TargetControlID="ddlb_xd"
Category="Xd"
PromptText="请选择学段"
LoadingText="读取学段数据中..."
ServicePath="GetXD_Grade.asmx"
ServiceMethod="Getxd"
>
</ajaxToolkit:CascadingDropDown>
<%--第2层的下拉选单--%>
<ajaxToolkit:CascadingDropDownID="CascadingDropDown2"runat="server"
TargetControlID="ddlb_Grade"
ParentControlID="ddlb_xd"
Category="Grade"
PromptText="请选择年级"
LoadingText="读取年级数据中..."
ServicePath="GetXD_Grade.asmx"
ServiceMethod="GetGradeByXdID">
</ajaxToolkit:CascadingDropDown>
<%--第3层的下拉选单--%>
<ajaxToolkit:CascadingDropDownID="CascadingDropDown3"runat="server"
TargetControlID="ddlb_CouseType"
ParentControlID="ddlb_Grade"
Category="Course"
PromptText="请选择课程"
LoadingText="读取课程数据中..."
ServicePath="GetXD_Grade.asmx"
ServiceMethod="GetCourseByGradeID">
</ajaxToolkit:CascadingDropDown>
(2).Web服务的代码
usingSystem;
usingSystem.Web;
usingSystem.Collections;
usingSystem.Web.Services;
usingSystem.Web.Services.Protocols;
//存取数据库所需之命名空间。
usingSystem.Data;
usingSystem.Data.SqlClient;
//存取Web.config所需之命名空间。
usingSystem.Web.Configuration;
//导入ScriptServiceAttribute类别所需的命名空间。
usingSystem.Web.Script.Services;
//返回CascadingDropDownNameValue数组所需之命名空间。
usingAjaxControlToolkit;
usingSystem.Collections.Generic;
usingSystem.Collections.Specialized;
usingQZH.EAF.SORM;
///<summary>
///GetXD_Grade的摘要说明
///
///</summary>
///
/////请在Public Class之前加入如下的声明,这是关键的地方:
// [ScriptService()]
[ScriptService()]
[WebService(Namespace ="http://tempuri.org/")]
[WebServiceBinding(ConformsTo =WsiProfiles.BasicProfile1_1)]
//若要允许使用ASP.NET AJAX从脚本中调用此Web服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
publicclassGetXD_Grade: System.Web.Services.WebService{
publicGetXD_Grade () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
///<summary>
///得到学段的列表
///</summary>
///<param name="knownCategoryValues"></param>
///<param name="category"></param>
///<returns></returns>
[WebMethod]
publicCascadingDropDownNameValue[] Getxd(
stringknownCategoryValues,
stringcategory)
{
//声明CascadingDropDownNameValue数组。
List<CascadingDropDownNameValue> values =
newList<CascadingDropDownNameValue>();
DataTabledt =newDataTable();
stringsql ="SELECT id,name FROM t_xd";
dt =SessionHL.SelectDataTable(sql);
for(inti = 0; i < dt.Rows.Count; i++)
{
values.Add(newCascadingDropDownNameValue(
dt.Rows[i]["name"].ToString(),dt.Rows[i]["id"].ToString()));//第一个参数是名称,第二个参数是值
}
returnvalues.ToArray();
}
///<summary>
///得到相应学段的年级列表
///
///</summary>
///<param name="knownCategoryValues"></param>
///<param name="category"></param>
///<returns></returns>
[WebMethod]
publicCascadingDropDownNameValue[] GetGradeByXdID(
stringknownCategoryValues,
stringcategory)
{
StringDictionarykcv =CascadingDropDown.
ParseKnownCategoryValuesString(knownCategoryValues);
//是否包含 学段 的值。
if(!kcv.ContainsKey("Xd"))
returnnull;
//声明CascadingDropDownNameValue数组。
List<CascadingDropDownNameValue> values =
newList<CascadingDropDownNameValue>();
DataTabledt =newDataTable();
SqlCommandSQLCmd =newSqlCommand();
SQLCmd.CommandText ="Select id,name from t_Grade where XdID=@XdID";
SQLCmd.Parameters.Add("@XdID",SqlDbType.NVarChar).Value = kcv["Xd"];
dt =SessionHL.SelectDataTable(SQLCmd);
for(inti = 0; i < dt.Rows.Count; i++)
{
values.Add(newCascadingDropDownNameValue(
dt.Rows[i]["name"].ToString(), dt.Rows[i]["id"].ToString()));//第一个参数是名称,第二个参数是值
}
returnvalues.ToArray();
}
///<summary>
///根据年级得到科目列表
///
///</summary>
///<param name="knownCategoryValues"></param>
///<param name="category"></param>
///<returns></returns>
[WebMethod]
publicCascadingDropDownNameValue[] GetCourseByGradeID(
stringknownCategoryValues,
stringcategory)
{
StringDictionarykcv =CascadingDropDown.
ParseKnownCategoryValuesString(knownCategoryValues);
//是否包含 年级 的值。
if(!kcv.ContainsKey("Grade"))
returnnull;
//声明CascadingDropDownNameValue数组。
List<CascadingDropDownNameValue> values =
newList<CascadingDropDownNameValue>();
DataTabledt =newDataTable();
SqlCommandSQLCmd =newSqlCommand();
SQLCmd.CommandText ="Select id,name from t_course where GradeID=@GradeID ";
SQLCmd.Parameters.Add("@GradeID",SqlDbType.NVarChar).Value = kcv["Grade"];
dt =SessionHL.SelectDataTable(SQLCmd);
for(inti = 0; i < dt.Rows.Count; i++)
{
values.Add(newCascadingDropDownNameValue(
dt.Rows[i]["name"].ToString(), dt.Rows[i]["id"].ToString()));//第一个参数是名称,第二个参数是值
}
returnvalues.ToArray();
}
}
(3)。在网页中取值时,验证为空否
//===================数据验证=================
//学段选项验证
if(ddlb_xd.SelectedItem.Text =="")
{
PublicFun.MessageBox("请选择学段!",this);
return;
}
//年级选项验证
if(ddlb_Grade.SelectedItem.Text =="")
{
PublicFun.MessageBox("请选择年级!",this);
return;
}
//年级选项验证
if(this.ddlb_CouseType.SelectedItem.Text =="")
{
PublicFun.MessageBox("请选择课程!",this);
return;
}
不必再特意绑定级联下拉列表中的值了,因为是选择时通过WEB服务得到的值