Asp.net ajax 使用CascadingDropDown以数据库数据建立三级联下拉框

    Asp.net 的ajax 有ajax.net(ajaxPro),atlas等版本。Asp.net ajax 1.0 是Atalas的后续,功能强大,上手容易,建议学之。CascadingDropDown是其中的一个功能,为层叠下拉列表框。但是Samle是用XML作为数据源的,不符合我的要求(唉,什么时候我能掌握好XML啊),所以写了这个。希望能给大家带来帮助

  数据库SQLSERVER 2000,其中有表T_company,T_department,T_user_customer,三表依次以前表ID连接关系。为了实现一个公司==》部门==》员工的三级下拉框,准备了如下步骤。

1、准备数据对象。

  采用Castle.activerecod工具。这样可以省去写SQL语句的烦恼。

Company对象:

using  System;
using  System.Collections.Generic;
using  System.Text;
using  Castle.ActiveRecord;
using  System.Collections;

namespace  util.DataVO
{
    
/// <summary>
    
/// Show the list of company
    
/// </summary>

    [ActiveRecord("T_company")]
    
public class T_company : ActiveRecordBase<T_company>
    
{
        
private string companyName;
        
private int companyId;
        
/// <summary>
        
/// 公司名称
        
/// </summary>

        [Property]
        
public string CompanyName
        
{
            
get return companyName; }
            
set { companyName = value; }
        }

        
/// <summary>
        
/// 公司ID
        
/// </summary>

        [PrimaryKey(PrimaryKeyType.Assigned)]
        
public int CompanyId
        
{
            
get return companyId; }
            
set { companyId = value; }
        }

}

 

department对象:

 

using  System;
using  System.Collections.Generic;
using  System.Text;
using  Castle.ActiveRecord;

namespace  util.DataVO
{
    
/// <summary>
    
/// show department
    
/// </summary>

    [ActiveRecord("T_department")]
    
public class T_department : ActiveRecordBase<T_department>
    
{
        
private string departmentName;
        
private int departmentId;
        
private int companyId;

        
/// <summary>
        
/// 公司ID
        
/// </summary>

        [Property]
        
public int CompanyId
        
{
            
get return companyId; }
            
set { companyId = value; }
        }

        
/// <summary>
        
/// 部门名称
        
/// </summary>

        [Property]
        
public string DepartmentName
        
{
            
get return departmentName; }
            
set { departmentName = value; }
        }

        
/// <summary>
        
/// 部门ID
        
/// </summary>

        [PrimaryKey(PrimaryKeyType.Assigned)]
        
public int DepartmentId
        
{
            
get return departmentId; }
            
set { departmentId = value; }
        }

  }

}

T_user_Customer对象

 

using  System;
using  System.Collections.Generic;
using  System.Text;
using  Castle.ActiveRecord;
using  System.Collections;

namespace  util.DataVO
{
    
/// <summary>
    
/// user Account
    
/// </summary>

    [ActiveRecord("T_User_Customer")]
    
public class T_User_Customer : ActiveRecordBase<T_User_Customer>
    
{
        
private string nameCn;
        
private int customerId;
        
private int companyId;
        
private int departmentId;
        
/// <summary>
        
/// 员工名
        
/// </summary>

        [Property]
        
public string NameCn
        
{
            
set { nameCn = value; }
            
get return nameCn; }
        }

        
/// <summary>
        
/// 员工ID
        
/// </summary>

        [PrimaryKey(PrimaryKeyType.Assigned)]
        
public int CustomerId
        
{
            
set { customerId = value; }
            
get return customerId; }
        }

        
/// <summary>
        
/// 公司ID
        
/// </summary>

        [Property]
        
public int CompanyId
        
{
            
get return companyId; }
            
set { companyId = value; }
        }

        
/// <summary>
        
/// 部门ID
        
/// </summary>

        [Property]
        
public int DepartmentId
        
{
            
get return departmentId; }
            
set { departmentId = value; }
        }

        
/// <summary>
        
/// 取得员工名称列表
        
/// </summary>
        
/// <returns></returns>

        public static string[] findAllNamelist()
        
{
            T_User_Customer[] list 
= FindAll();
            
string[] nameList = new string[list.Length];
            
for (int i = 0; i < list.Length; i++)
            
{
                nameList[i] 
= list[i].NameCn;
            }

            
return nameList;

        }



    }

}

在Global.asax里面添加初始化,初始化一个命名空间就可以了

 

  Castle.ActiveRecord.Framework.IConfigurationSource source  =
        System.Configuration.ConfigurationManager.GetSection(
" activerecord " as  Castle.ActiveRecord.Framework.IConfigurationSource;
        Castle.ActiveRecord.ActiveRecordStarter.Initialize(
typeof (util.DataVO.T_company).Assembly, source);
       

 

2、在ASPX页面上加下拉列表框

 

<% @ Page Language = " C# "  AutoEventWireup = " true "  CodeFile = " ReportMasterCascading.aspx.cs "  Inherits = " back_crystalReport_ReportMasterCascading "   %>

<% @ Register Assembly = " AjaxControlToolkit "  Namespace = " AjaxControlToolkit "  TagPrefix = " ajaxToolkit "   %>
    


< html xmlns = " http://www.w3.org/1999/xhtml "   >
< head id = " Head1 "  runat = " server " >
    
< title > 无标题页 </ title >    
    
< link href = " ../../common/css/okcss.css "  rel = " stylesheet "  type = " text/css "   />  
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< script type = " text/javascript "  src = " ../../common/js/dmCalendarForAllDate.js " ></ script >

    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
    
< link href = " /aspnet_client/System_Web/2_0_50727/CrystalReportWebFormViewer3/css/default.css "
        rel
= " stylesheet "  type = " text/css "   />
</ head >
< body >
    
< form id = " form1 "  runat = " server " >
        
< div >
        
< asp:ScriptManager ID = " ScriptManager1 "  runat = " server "  EnablePartialRendering = " true "   />
            
< table cellpadding = " 4 "  cellspacing = " 1 "   class = " table3 "  style = " border-right: 0px; border-top: 0px;
                border - left: 0px; width:  100 % ; border - bottom: 0px; " >
                 < tr >
                    
< td align = " center "  bgcolor = " #9cceff " >
                        
< strong > 报表分析 </ strong ></ td >
                
</ tr >
                
< tr >
                    
< td align = " center " >
                        
< table style = " width: 100% "  border = " 1 " >
                            
< tr >
                                
< td style = " width: 77px " >
                                    公司:
</ td >
                                
< td style = " width: 92px " >
                                    
< asp:DropDownList ID = " DropDownListCompany "  runat = " server "  Width = " 132px " >
                                    
</ asp:DropDownList ></ td >
                                    
< ajaxToolkit:CascadingDropDown
                                        ID
= " CascadingDropDown1 "
                                        runat
= " server "
                                        TargetControlID
= " DropDownListCompany "  
                                        Category
= " Company "  
                                        PromptText
= " 请选择一个公司 "  
                                        ServicePath
= " GetCascadeService.asmx "
                                        ServiceMethod
= " GetCompanyList "   />
                                        
                                
< td style = " width: 67px " >
                                    
& nbsp; 日 & nbsp;  & nbsp;期 : </ td >
                                
< td colspan = " 2 " >
                                    从:
< asp:TextBox ID = " TextBoxDateFrom "  runat = " server "  MaxLength = " 10 "  onfocus = " calendar() "  Width = " 69px " ></ asp:TextBox > 到: < asp:TextBox ID = " TextBoxDateTo "  runat = " server "  MaxLength = " 10 "  onfocus = " calendar() "  Width = " 69px " ></ asp:TextBox ></ td >
                                
< td style = " width: 100px " >
                                    
</ td >
                            
</ tr >
                            
< tr >
                                
< td style = " width: 77px; height: 17px " >
                                    部门名称:
</ td >
                                
< td style = " width: 92px; height: 17px " >
                                    
< asp:DropDownList ID = " DropDownListDepartment "  runat = " server "  Width = " 132px " >
                                    
</ asp:DropDownList ></ td >
                                    
< ajaxToolkit:CascadingDropDown
                                    ID
= " CascadingDropDown2 "
                                    runat
= " server "
                                    TargetControlID
= " DropDownListDepartment "
                                    ParentControlID
= " DropDownListCompany "
                                    PromptText
= " 请选择部门 "
                                    ServiceMethod
= " GetDepartmentList "
                                    ServicePath
= " GetCascadeService.asmx "
                                    Category
= " Department "   />
                                     
                                
< td style = " width: 67px; height: 17px " >
                                    员工名称:
</ td >
                                
< td style = " height: 17px "  colspan = " 2 " >
                                    
< asp:DropDownList ID = " DropDownListCustomer "  runat = " server "  Width = " 132px " >
                                    
</ asp:DropDownList ></ td >
                                    
< ajaxToolkit:CascadingDropDown
                                        ID
= " CascadingDropDown3 "
                                        runat
= " server "
                                        TargetControlID
= " DropDownListCustomer "
                                        ParentControlID
= " DropDownListDepartment "
                                        PromptText
= " 请选择员工 "
                                        ServiceMethod
= " GetCustomerList "
                                        ServicePath
= " GetCascadeService.asmx "
                                        Category
= " Customer "   />                                    
                                
< td style = " width: 100px; height: 17px " >
                                    
< asp:ImageButton ID = " ImageBSearch "  runat = " server "  ImageUrl = " ~/common/img/button/back/serch.gif "
                                        OnClick
= " ImageBSearch_Click "   /></ td >
                            
</ tr >
                            
< tr >
                                
< td style = " width: 77px " >
                                
</ td >
                                
< td style = " width: 92px " >
                                
</ td >
                                
< td style = " width: 67px " >
                                
</ td >
                                
< td style = " width: 100px " >
                                
</ td >
                                
< td style = " width: 100px " >
                                
</ td >
                                
< td style = " width: 100px " >
                                
</ td >
                            
</ tr >
                        
</ table >
                    
</ td >
                
</ tr >
                
< tr >
                    
< td align = " center " >
                    
</ td >
                
</ tr >
                
             </ table >
        
</ div >
    
</ form >
</ body >
</ html >

3、编写对应的webservice

 

using  System;
using  System.Web;
using  System.Collections;
using  System.Web.Services;
using  System.Web.Services.Protocols;
using  AjaxControlToolkit;
using  util.DataVO;
using  System.Collections.Generic;
using  System.Web.Script.Services;
using  System.Collections.Specialized;


/// <summary>
/// GetCascadeService 的摘要说明
/// </summary>

[WebService(Namespace  =   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService()]
public   class  GetCascadeService : System.Web.Services.WebService
{

    
public GetCascadeService()
    
{

        
//如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 
    }


    [WebMethod]   
    
public CascadingDropDownNameValue[] GetCompanyList(string knownCategoryValues,
        
string category)
    
{
        List
<CascadingDropDownNameValue> values =new List<CascadingDropDownNameValue>();
        T_company[] list 
= T_company.FindAll();
        
foreach(T_company tc in list)
        
{
            
string name=tc.CompanyName;
            
int id = tc.CompanyId;
            values.Add(
new CascadingDropDownNameValue(name, id.ToString()));

        }

        
return values.ToArray();

    }


    [WebMethod]   
    
public CascadingDropDownNameValue[] GetDepartmentList(string knownCategoryValues,
        
string category)
    
{
        StringDictionary kv 
=CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        
int companyId;
        
if (!kv.ContainsKey("Company"|| !Int32.TryParse(kv["Company"], out companyId))
        
{
            
return null;
        }

        List
<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
        T_department[] list 
= T_department.FindAllByProperty("CompanyId",companyId);
        
foreach (T_department td in list)
        
{
            
string name = td.DepartmentName;
            
int id = td.DepartmentId;
            values.Add(
new CascadingDropDownNameValue(name, id.ToString()));
        }

        
return values.ToArray();

    }


    [WebMethod]    
    
public CascadingDropDownNameValue[] GetCustomerList(string knownCategoryValues,
        
string category)
    
{
        StringDictionary kv 
= CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
        
int departmentId;
        
if (!kv.ContainsKey("Department"|| !Int32.TryParse(kv["Department"], out departmentId))
        
{
            
return null;
        }

        List
<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
        T_User_Customer[] list 
= T_User_Customer.FindAllByProperty("DepartmentId", departmentId);
        
foreach (T_User_Customer td in list)
        
{
            
string name = td.NameCn;
            
int id = td.CustomerId;          
            values.Add(
new CascadingDropDownNameValue(name, id.ToString()));
        }

        
return values.ToArray();
    }


}

 

注意:

(1)Castle.activerecord需要初始化

(2)ASPX页面上要加

< asp:ScriptManager ID = " ScriptManager1 "  runat = " server "  EnablePartialRendering = " true "   />

(3)Webservice的类名前面添加

[System.Web.Script.Services.ScriptService()],不然报下拉框中文字为“[Method Error 12031]”或“[Method Error 500]”

(4)目前关于Ajax的版本很多,AjaxPro,atalas,asp.net ajax,建议了解一下相互之前的关系,选一样学习。

本文采用的是http://asp.net/ajax/downloads/default.aspx上面下载的Asp.net ajax 其中Sample很多,也便于学习

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值