ASP.NET中自定义控件的创建和使用
在asp.net中创建和使用自定义控件为我们编写程序带来了灵活性,并且能够保护程序源码的版权。其思想是:建立一个cs文件,在该文件中创建的控件必须继承System.Web.UI.Control类,可以为控件创建属性、方法和事件。然后编译成为程序集,放到Bin目录下,剩下的就是如何使用了。
本文通过一个实倒对自定义控件的创建和使用进行说明。程序主要实现了对SqlServer2000中的一个内置数据库Northwind的表Employees进行访问,可以对该表中的任意字段进行升序或降序排列。
以下是详细的创建过程:
1、 创建一个DataSetClass.cs类文件,并输入如下内容:
using System;
using System.Web;
using System.Web.UI;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
[assembly: AssemblyTitle("获取数据的WEB控件")]
[assembly: AssemblyDescription("可以对返回的数据进行任意排序")]
[assembly: AssemblyConfiguration("无配置")]
[assembly: AssemblyCompany("ACCP")]
[assembly: AssemblyProduct("DATASETCLASS")]
[assembly: AssemblyCopyright("李赞红")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly:AssemblyVersion("1.1.33.222")]
namespace TeachShow.Charpter9.ReturnDataSet
{
/// <summary>
/// 要排序的字段
/// </summary>
public enum SortType
{
EmployeeID,
LastName,
FirstName,
Title,
TitleOfCourtesy,
BirthDate
}
/// <summary>
/// 排序方式,升或降序
/// </summary>
public enum SortStyle
{
desc,
asc
}
/// <summary>
/// DataSetClass 的摘要说明。
/// </summary>
public class DataSetClass:Control
{
private SortType psortType; //表示表中的字段。
private SortStyle psortStyle; //表示排序了方式是升还是降。
public SortType sortType
{
get
{
return this.psortType;
}
set
{
this.psortType=value;
}
}
public SortStyle sortStyle
{
get
{
return this.psortStyle;
}
set
{
this.psortStyle=value;
}
}
public DataSetClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
this.psortType=SortType.EmployeeID;
this.psortStyle =SortStyle.desc;
}
/// <summary>
/// 获取记录集
/// </summary>
/// <returns></returns>
public DataSet GetData()
{
string strType=null;
string strStyle=null;
string sql;
switch(psortType)
{
case SortType.EmployeeID:
strType="EmployeeID";
break;
case SortType.BirthDate:
strType="BirthDate";
break;
case SortType.FirstName:
strType="FirstName";
break;
case SortType.LastName:
strType="LastName";
break;
case SortType.Title:
strType="Title";
break;
case SortType.TitleOfCourtesy:
strType="TitleOfCourtesy";
break;
default:
strType="undefine";
break;
}
switch(psortStyle)
{
case SortStyle.asc:
strStyle="asc";
break;
case SortStyle.desc:
strStyle="desc";
break;
default:
strStyle="undefine";
break;
}
sql="select * from Employees order by "+ strType + " " + strStyle;
SqlConnection con=new SqlConnection("server=accp-lzh;uid=sa;pwd=sasa;database=Northwind");
SqlCommand cmd=con.CreateCommand();
cmd.CommandType=CommandType.Text;
cmd.CommandText=sql;
SqlDataAdapter ada=new SqlDataAdapter();
ada.SelectCommand=cmd;
DataSet ds=new DataSet();
con.Open();
ada.Fill(ds,"Employees");
con.Close();
return ds;
}
}
}
2、 保存后编译该文件为程序集,编译命令为: csc /t:library /r:System.dll,System.Web.dll C:\Inetpub\wwwroot\TeachShow\Charpter9\ReturnDataSet\DataSetClass.cs。其中:C:\Inetpub\wwwroot\TeachShow\Charpter9\ReturnDataSet\DataSetClass.cs为文件所在的路径。如果编译成功,将生成一个DataSetClass.dll文件
3、 新建一个WEB窗体,将DataSetClass.dl加入到工具箱中。方法为:打开工具箱,找到WEB窗体选项卡,单击右键,选择“添加/删除项”,单击“浏览”按钮,找到DataSetClass.dll文件,确定后就自动加到选项卡中了。控件名称即类名:DataSetClass
4、 下面开始使用该控件:绘制一个两行一列的表格,上一行放一个DataSetClass,下一行放一个DataGrid控件用来显示数据。
5、 代码如下:
Test.aspx内容:
<%@ Register TagPrefix="cc2" Namespace="TeachShow.Charpter9.ReturnDataSet" Assembly="DataSetClass" %>
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="TeachShow.Charpter9.ReturnDataSet.Test" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Test</title>
<LINK rel="stylesheet" type="text/css" href="../../Style.css">
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="558" height="198">
<tr>
<td width="558" height="35" class="smallred"><FONT face="宋体">
<cc2:DataSetClass id="DataSetClass1" runat="server" sortType="LastName" sortStyle="asc"></cc2:DataSetClass></FONT></td>
</tr>
<tr>
<td width="558" height="163">
<asp:DataGrid id="DataGrid1" runat="server" Width="542px" CssClass="smallBlack"></asp:DataGrid></td>
</tr>
</table>
</center>
</div>
</form>
</body>
</HTML>
Test.aspx.cs内容:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace TeachShow.Charpter9.ReturnDataSet
{
/// <summary>
/// Test 的摘要说明。
/// </summary>
public class Test : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.DropDownList DropDownList2;
protected System.Web.UI.WebControls.Button Button1;
protected TeachShow.Charpter9.ReturnDataSet.DataSetClass DataSetClass1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.BindGrid();
}
private void BindGrid()
{
this.DataGrid1.DataSource=this.DataSetClass1.GetData();
this.DataGrid1.DataBind();
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}