Atlas学习手记(12):使用CascadingDropDown控件

CascadingDropDown通常叫作级联下拉菜单,本文将通过读取Northwind数据库中的EmplyeeOrderOrderDatail信息作为示例,来展示一下它的使用。

 

主要内容

1CascadingDropDown控件介绍

2.从数据库读取数据并填充CascadingDropDown

 

一.CascadingDropDown控件介绍

CascadingDropDown通常叫作级联下拉菜单,本文将通过读取Northwind数据库中的EmplyeeOrderOrderDatail信息作为示例,来展示一下它的使用。示例代码如下:

None.gif < atlasToolkit:CascadingDropDown  ID ="CDD1"  runat ="server" >
None.gif
None.gif    dot.gif
None.gif
None.gif    
< atlasToolkit:CascadingDropDownProperties
None.gif
None.gif        
TargetControlID ="DropDownList2"
None.gif
None.gif        Category
="Model"
None.gif
None.gif        PromptText
="Please select a model"
None.gif
None.gif        LoadingText
="[Loading modelsdot.gif]"
None.gif
None.gif        ServicePath
="CarsService.asmx"
None.gif
None.gif        ServiceMethod
="GetDropDownContents"
None.gif
None.gif        ParentControlID
="DropDownList1"
None.gif
None.gif        SelectedValue
="SomeValue" >
None.gif
None.gif    
</ atlasToolkit:CascadingDropDownProperties >
None.gif
None.gif    dot.gif
None.gif
None.gif
</ atlasToolkit:CascadingDropDown >

对于CascadingDropDown需要为它添加CascadingDropDownProperties,有多少个下拉列表,就添加几个CascadingDropDownProperties,主要属性如下:

属性

说明

TargetControlID

指定要扩展的DropDownListID

Category

DropDownList表示的类别名称,在WebMethod中会用到

PromptText

没有选择时显示的文字

LoadingText

加载数据时显示的文字

ServicePath

获取数据的Web Service,为每个DropDownList都要指定

ServiceMethod

获取数据的Web Method

ParentControlID

要扩展的DropDownList的父控件ID

SelectedValue

默认的选择项的值

二.从数据库读取数据并填充CascadingDropDown

下面用读取Northwind数据库中的EmplyeeOrderOrderDatail信息,看一个完整的示例。在新建一个Web Site后,先在页面的头部加上:

ExpandedBlockStart.gif ContractedBlock.gif <% dot.gif @ Register Assembly="AtlasControlToolkit" 
InBlock.gif
InBlock.gif            Namespace
="AtlasControlToolkit" 
InBlock.gif
ExpandedBlockEnd.gif            TagPrefix
="atlasToolkit" 
%>

加入三个DropDownList,分别用来显示EmplyeeOrderOrderDatail

None.gif < div >
None.gif
None.gif    
< h3 >
None.gif
None.gif        Employee:
None.gif
None.gif        
< asp:DropDownList  ID ="ddlEmployees"  runat ="server"   />< br  />< br  />
None.gif
None.gif         
&nbsp;&nbsp; Order:
None.gif
None.gif        
< asp:DropDownList  ID ="ddlOrders"  runat ="server"   />< br  />< br  />
None.gif
None.gif         
&nbsp;&nbsp; Detail:
None.gif
None.gif        
< asp:DropDownList  ID ="ddlOrderDetails"  runat ="server"   />
None.gif
None.gif    
</ h3 >
None.gif
None.gif
</ div >

下面我们添加一个Northwind.asmxWeb Service,编写相关的Web Method

None.gif [WebMethod]
None.gif
None.gif
public  CascadingDropDownNameValue[] GetEmployees(
None.gif
None.gif    
string  knownCategoryValues,  string  category)
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gif    
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
InBlock.gif
InBlock.gif    SqlConnection connection 
= new
InBlock.gif
InBlock.gif        SqlConnection(connectionString);
InBlock.gif
InBlock.gif    SqlCommand command 
= new SqlCommand("SELECT * FROM Employees");
InBlock.gif
InBlock.gif    command.Connection 
= connection;
InBlock.gif
InBlock.gif    connection.Open();
InBlock.gif
InBlock.gif    SqlDataAdapter adapter 
= new SqlDataAdapter(command);
InBlock.gif
InBlock.gif    DataSet dataSet 
= new DataSet();
InBlock.gif
InBlock.gif    adapter.Fill(dataSet);
InBlock.gif
InBlock.gif    command.Connection.Close();
InBlock.gif
InBlock.gif    DataTable tbl 
= dataSet.Tables[0];
InBlock.gif
InBlock.gif    List
<CascadingDropDownNameValue> values =
InBlock.gif
InBlock.gif        
new List<CascadingDropDownNameValue>();
InBlock.gif
InBlock.gif    
foreach (DataRow dr in tbl.Rows)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        
string sEmployee = (string)dr["FirstName"+ " " +
InBlock.gif
InBlock.gif            dr[
"LastName"];
InBlock.gif
InBlock.gif        
int iEmployee = (int)dr["EmployeeID"];
InBlock.gif
InBlock.gif        values.Add(
new CascadingDropDownNameValue(
InBlock.gif
InBlock.gif          sEmployee, iEmployee.ToString()));
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif    
return values.ToArray();
InBlock.gif
ExpandedBlockEnd.gif}

注意Web Method的参数签名是不可以改变的,并且它最后返回的是名-值对这种形式的数组。

整个完整后的Web Service如下:

ContractedBlock.gif ExpandedBlockStart.gif 完整代码
None.gifusing System;
None.gif
None.gif
using System.Web;
None.gif
None.gif
using System.Collections;
None.gif
None.gif
using System.Configuration;
None.gif
None.gif
using System.Collections.Generic;
None.gif
None.gif
using System.Collections.Specialized;
None.gif
None.gif
using System.Web.Services;
None.gif
None.gif
using System.Web.Services.Protocols;
None.gif
None.gif
using AtlasControlToolkit;
None.gif
None.gif
using System.Data;
None.gif
None.gif
using System.Data.SqlClient;
None.gif
None.gif 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
/**//// <summary>
InBlock.gif
InBlock.gif
/// Summary description for Northwind
InBlock.gif
ExpandedBlockEnd.gif
/// </summary>

None.gif
None.gif[WebService(Namespace 
= "http://tempuri.org/")]
None.gif
None.gif[WebServiceBinding(ConformsTo 
= WsiProfiles.BasicProfile1_1)]
None.gif
ExpandedBlockStart.gifContractedBlock.gif
public class Northwind : System.Web.Services.WebService dot.gif{
InBlock.gif
InBlock.gif 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
public Northwind () dot.gif{
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        
//Uncomment the following line if using designed components 
InBlock.gif
InBlock.gif        
//InitializeComponent(); 
InBlock.gif

ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    [WebMethod]
InBlock.gif
InBlock.gif    
public CascadingDropDownNameValue[] GetEmployees(
InBlock.gif
InBlock.gif        
string knownCategoryValues, string category)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
InBlock.gif
InBlock.gif        SqlConnection connection 
= new
InBlock.gif
InBlock.gif            SqlConnection(connectionString);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlCommand command 
= new SqlCommand("SELECT * FROM Employees");
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        command.Connection 
= connection;
InBlock.gif
InBlock.gif        connection.Open();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlDataAdapter adapter 
= new SqlDataAdapter(command);
InBlock.gif
InBlock.gif        DataSet dataSet 
= new DataSet();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        adapter.Fill(dataSet);
InBlock.gif
InBlock.gif        command.Connection.Close();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        DataTable tbl 
= dataSet.Tables[0];
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        List
<CascadingDropDownNameValue> values =
InBlock.gif
InBlock.gif            
new List<CascadingDropDownNameValue>();
InBlock.gif
InBlock.gif        
foreach (DataRow dr in tbl.Rows)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
string sEmployee = (string)dr["FirstName"+ " " +
InBlock.gif
InBlock.gif                dr[
"LastName"];
InBlock.gif
InBlock.gif            
int iEmployee = (int)dr["EmployeeID"];
InBlock.gif
InBlock.gif            values.Add(
new CascadingDropDownNameValue(
InBlock.gif
InBlock.gif              sEmployee, iEmployee.ToString()));
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
return values.ToArray();
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    [WebMethod]
InBlock.gif
InBlock.gif    
public CascadingDropDownNameValue[] GetOrdersByEmployee(
InBlock.gif
InBlock.gif      
string knownCategoryValues,
InBlock.gif
InBlock.gif      
string category)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        StringDictionary kv 
= CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
InBlock.gif
InBlock.gif        
int iEmployee;
InBlock.gif
InBlock.gif        
if (!kv.ContainsKey("Employee"|| !Int32.TryParse(kv["Employee"], out iEmployee))
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
return null;
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
InBlock.gif
InBlock.gif        SqlConnection connection 
= new
InBlock.gif
InBlock.gif            SqlConnection(connectionString);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlCommand command 
=
InBlock.gif
InBlock.gif        
new SqlCommand("SELECT OrderID FROM Orders WHERE EmployeeID = " + iEmployee);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        command.Connection 
= connection;
InBlock.gif
InBlock.gif        connection.Open();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlDataAdapter adapter 
= new SqlDataAdapter(command);
InBlock.gif
InBlock.gif        DataSet dataSet 
= new DataSet();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        adapter.Fill(dataSet);
InBlock.gif
InBlock.gif        command.Connection.Close();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        DataTable tbl 
= dataSet.Tables[0];
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        List
<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
InBlock.gif
InBlock.gif        
foreach (DataRow dr in tbl.Rows)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
string sOrder = dr["OrderID"].ToString();
InBlock.gif
InBlock.gif            
int iOrder = (int)dr["OrderID"];
InBlock.gif
InBlock.gif            values.Add(
new CascadingDropDownNameValue(
InBlock.gif
InBlock.gif              sOrder, iOrder.ToString()));
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
return values.ToArray();
InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif    [WebMethod]
InBlock.gif
InBlock.gif    
public CascadingDropDownNameValue[] GetDetailsByOrder(
InBlock.gif
InBlock.gif      
string knownCategoryValues,
InBlock.gif
InBlock.gif      
string category)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif
InBlock.gif        StringDictionary kv 
= CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
InBlock.gif
InBlock.gif        
int iOrder;
InBlock.gif
InBlock.gif        
if (!kv.ContainsKey("Order"|| !Int32.TryParse(kv["Order"], out iOrder))
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
return null;
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        
string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
InBlock.gif
InBlock.gif        SqlConnection connection 
= new
InBlock.gif
InBlock.gif            SqlConnection(connectionString);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlCommand command 
=
InBlock.gif
InBlock.gif        
new SqlCommand("SELECT UnitPrice,OrderID FROM [Order Details] WHERE OrderID = " + iOrder);
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        command.Connection 
= connection;
InBlock.gif
InBlock.gif        connection.Open();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        SqlDataAdapter adapter 
= new SqlDataAdapter(command);
InBlock.gif
InBlock.gif        DataSet dataSet 
= new DataSet();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        adapter.Fill(dataSet);
InBlock.gif
InBlock.gif        command.Connection.Close();
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        DataTable tbl 
= dataSet.Tables[0];
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif        List
<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>();
InBlock.gif
InBlock.gif        
foreach (DataRow dr in tbl.Rows)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
InBlock.gif            
string UnitPrice = dr["UnitPrice"].ToString();
InBlock.gif
InBlock.gif            
int intOrder = (int)dr["OrderID"];
InBlock.gif
InBlock.gif            values.Add(
new CascadingDropDownNameValue(
InBlock.gif
InBlock.gif              UnitPrice, intOrder.ToString()));
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
return values.ToArray();
InBlock.gif
ExpandedSubBlockEnd.gif    }
   
InBlock.gif
ExpandedBlockEnd.gif}

Web.config中设置连接信息:

None.gif < connectionStrings >
None.gif
None.gif    
< add  name ="ConnectionString"  connectionString ="Data Source=RJ-097;User ID=sa;Password=sa;Initial Catalog=Northwind"  providerName ="System.Data.SqlClient" />
None.gif
None.gif
</ connectionStrings >

这时我们再添加CascadingDropDown控件,设置它的属性如下:

None.gif < atlasToolkit:CascadingDropDown  ID ="CascadingDropDown1"  runat ="server" >
None.gif
None.gif    
< atlasToolkit:CascadingDropDownProperties  Category ="Employee"  ParentControlID =""
None.gif
None.gif        PromptText
="Select Employee"  SelectedValue =""  ServiceMethod ="GetEmployees"  ServicePath ="Northwind.asmx"
None.gif
None.gif        TargetControlID
="ddlEmployees"   />
None.gif
None.gif    
< atlasToolkit:CascadingDropDownProperties  Category ="Order"  ParentControlID ="ddlEmployees"
None.gif
None.gif        PromptText
="Select Order"  SelectedValue =""  ServiceMethod ="GetOrdersByEmployee"
None.gif
None.gif        ServicePath
="Northwind.asmx"  TargetControlID ="ddlOrders"   />
None.gif
None.gif    
< atlasToolkit:CascadingDropDownProperties  Category ="OrderDetail"  ParentControlID ="ddlOrders"
None.gif
None.gif        PromptText
="Select OrderDetail"  SelectedValue =""  ServiceMethod ="GetDetailsByOrder"
None.gif
None.gif        ServicePath
="Northwind.asmx"  TargetControlID ="ddlOrderDetails"   />
None.gif
None.gif
</ atlasToolkit:CascadingDropDown >

至此,大功告成。运行后效果如下:

选择:

完整示例下载:http://files.cnblogs.com/Terrylee/CascadingDropDownDemo.rar

转载于:https://www.cnblogs.com/Terrylee/archive/2006/08/03/Atlas_CascadingDropDown.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值