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服务得到的值
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号