|
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 } }
|