作者在 2008-05-02 01:10:57 发布以下内容
机子有点卡,没有办法,开机的时间太长了。
晕,连打字都有点卡……
控件名:cascadingdropdown
用途即效果:结合dropdownlist做两级联动
控件属性:
aspx页面:
托两个dropdownlist控件到页面,在托两个cascadingdropdown控件,并根据需要设置属性
eg:
<asp:DropDownList ID="da" runat="server">
</asp:DropDownList>
<br />
<br />
<cc1:cascadingdropdown id="Cascadingda" runat="server" TargetControlID="da" LoadingText="正在加载...." PromptText="请选择" Category="dalei" ServiceMethod="daleiList" ServicePath="WebService.asmx">
</cc1:cascadingdropdown>
<br />
<asp:DropDownList ID="xiao" runat="server">
</asp:DropDownList> <br />
<br /><cc1:cascadingdropdown id="Cascadingxiao" runat="server" TargetControlID="xiao" LoadingText="正在加载....." PromptText="请选择" Category="xiaolei" ServiceMethod="xiaoleiList" ServicePath="WebService.asmx" ParentControlID="da"> //对比两个控件的属性设置,这个比上一个多了一个ParentControlID="da",这里设置他的父控件的id为“da”
</cc1:CascadingDropDown>
WebService.cs页面:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data.SqlClient; //数据库连接所需命名空间
using System.Data; //Dataset所需的命名空间
using System.Collections.Generic; //这个是必须添加的,List<>所需的命名空间。
using System.Collections.Specialized;
using AjaxControlToolkit; //ajax控件所需命名空间
/// <summary>
/// WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService] //这个是必须的,要不会出现WebMethod error 12030等的错误,我做的时候就没有添加,弄了半天才发现原来是这个错误。并且要确保在方法的前面。
public class WebService : System.Web.Services.WebService {
public WebService () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public CascadingDropDownNameValue[] daleiList(string knownCategoryValues, string category) 这里的参数等都不可以改变,除了daleiList可以是自己定义的之外,这里的daleiList虽然可以自己定义,但是一定要确保和aspx页面的ServiceMethod="daleiList" 一致,否则会出现WebMethod error
{
//StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); //如果是第一级则这个可以不要
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=sa;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("select lastname,ReportsTo from employees", conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataRow[] row = ds.Tables[0].Select();
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); //将值填充到dropdownlist控件中,这里的参数也不是可以改变的。
foreach (DataRow dr in row)
{
values.Add(new CascadingDropDownNameValue(dr["lastname"].ToString().Trim(), dr["ReportsTo"].ToString().Trim())); //这里添加一个text/value对
}
return values.ToArray(); //返回
}
[WebMethod]
public CascadingDropDownNameValue[] xiaoleiList(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);//二级下拉列表,得取得一级的category的值,也就是当前选定的值。以下代码是判断上级列表的category值,存在或不是空的话把值赋给daleiid; dalei是一级CascadingDropDown设置的category属性名称
int daleiid;
if (!kv.ContainsKey("dalei") || !Int32.TryParse(kv["dalei"], out daleiid))
{
return null;
}
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=sa;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("select firstname,employeeid from employees where ReportsTo="+daleiid, conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataRow[] row = ds.Tables[0].Select();
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
foreach (DataRow dr in row)
{
values.Add(new CascadingDropDownNameValue(dr["firstname"].ToString(), dr["employeeid"].ToString()));
}
return values.ToArray();
}
效果图 :



晕,连打字都有点卡……
控件名:cascadingdropdown
用途即效果:结合dropdownlist做两级联动
控件属性:
属性 |
说明 |
TargetControlID |
要控制的dropdownlist的id |
Category |
主要就是为你CascadingDropDownr控件对应的下拉列表控件选定的值取个名字,好区分是下拉列表的值。怎么样说了,我将它简单的理解成就是给selectedvalue取了一个别名,要是理解错误,还望网友们指正。 |
PromptText |
没有选择时显示的文字 |
LoadingText |
加载数据时显示的文字 |
ServicePath |
获取数据的Web Service,为每个DropDownList都要指定 |
ServiceMethod |
获取数据的Web Method |
ParentControlID |
DropDownList的父控件ID |
SelectedValue |
默认的选择项的值 |
aspx页面:
托两个dropdownlist控件到页面,在托两个cascadingdropdown控件,并根据需要设置属性
eg:
<asp:DropDownList ID="da" runat="server">
</asp:DropDownList>
<br />
<br />
<cc1:cascadingdropdown id="Cascadingda" runat="server" TargetControlID="da" LoadingText="正在加载...." PromptText="请选择" Category="dalei" ServiceMethod="daleiList" ServicePath="WebService.asmx">
</cc1:cascadingdropdown>
<br />
<asp:DropDownList ID="xiao" runat="server">
</asp:DropDownList> <br />
<br /><cc1:cascadingdropdown id="Cascadingxiao" runat="server" TargetControlID="xiao" LoadingText="正在加载....." PromptText="请选择" Category="xiaolei" ServiceMethod="xiaoleiList" ServicePath="WebService.asmx" ParentControlID="da"> //对比两个控件的属性设置,这个比上一个多了一个ParentControlID="da",这里设置他的父控件的id为“da”
</cc1:CascadingDropDown>
WebService.cs页面:
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data.SqlClient; //数据库连接所需命名空间
using System.Data; //Dataset所需的命名空间
using System.Collections.Generic; //这个是必须添加的,List<>所需的命名空间。
using System.Collections.Specialized;
using AjaxControlToolkit; //ajax控件所需命名空间
/// <summary>
/// WebService 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService] //这个是必须的,要不会出现WebMethod error 12030等的错误,我做的时候就没有添加,弄了半天才发现原来是这个错误。并且要确保在方法的前面。
public class WebService : System.Web.Services.WebService {
public WebService () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public CascadingDropDownNameValue[] daleiList(string knownCategoryValues, string category) 这里的参数等都不可以改变,除了daleiList可以是自己定义的之外,这里的daleiList虽然可以自己定义,但是一定要确保和aspx页面的ServiceMethod="daleiList" 一致,否则会出现WebMethod error
{
//StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues); //如果是第一级则这个可以不要
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=sa;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("select lastname,ReportsTo from employees", conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataRow[] row = ds.Tables[0].Select();
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); //将值填充到dropdownlist控件中,这里的参数也不是可以改变的。
foreach (DataRow dr in row)
{
values.Add(new CascadingDropDownNameValue(dr["lastname"].ToString().Trim(), dr["ReportsTo"].ToString().Trim())); //这里添加一个text/value对
}
return values.ToArray(); //返回
}
[WebMethod]
public CascadingDropDownNameValue[] xiaoleiList(string knownCategoryValues, string category)
{
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);//二级下拉列表,得取得一级的category的值,也就是当前选定的值。以下代码是判断上级列表的category值,存在或不是空的话把值赋给daleiid; dalei是一级CascadingDropDown设置的category属性名称
int daleiid;
if (!kv.ContainsKey("dalei") || !Int32.TryParse(kv["dalei"], out daleiid))
{
return null;
}
SqlConnection conn = new SqlConnection("server=(local);uid=sa;pwd=sa;database=northwind");
SqlDataAdapter da = new SqlDataAdapter("select firstname,employeeid from employees where ReportsTo="+daleiid, conn);
DataSet ds = new DataSet();
da.Fill(ds);
DataRow[] row = ds.Tables[0].Select();
List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
foreach (DataRow dr in row)
{
values.Add(new CascadingDropDownNameValue(dr["firstname"].ToString(), dr["employeeid"].ToString()));
}
return values.ToArray();
}
效果图 :






————————————————————