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

    }

}

原文:http://blog.csdn.net/ppluncle/archive/2004/07/09/38003.aspx

原文地址:https://www.cnblogs.com/dagon007/p/118163.html