查看完整版本: [04-09][分享]ASP.NET中自定义控件的创建和使用

wdflxx 2008-4-9 07:06

[04-09][分享]ASP.NET中自定义控件的创建和使用

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
    }

}

wdflxx 2008-4-9 07:06

ASP.NET结合COM组件发送Email

ASP.NET结合COM组件发送Email


  在系统目录(如c:\winnt或c:\windows)的system32子目录中可以找到一个名称为cdosys.dll的文件,我们可以通过ASP.NET调用此COM组件来实现Email的发送。cdosys构建在SMTP协议和NNTP协议之上,并且作为Windows2000 Server的组件被安装,当然我们也可以使用Exchange2000中cdoex.dll来实现发送邮件的机制,由于cdosys.dll内嵌到了操作系统中,所以不用再去注册相应的其他邮件发送程序比如jmail等。

  1、新建一个项目文件

  2、添加引用系统目录下的cdosys.dll文件,在引用中会发现添加了两个要用到的接口:CDO,ADODB

  3、添加新项文件SendMail.aspx,在其页面上放置三个Label,三个Textbox,作用分别为收件人地址、主题、内容,放置一个Button按钮。

  4、切换到代码页,创建一下内容

public void CDOsendmail()
{
 try
 {
  CDO.Message Msg = new CDO.Message();
  Msg.From = "rattlesnake@263.net";
  Msg.To = this.TextBox1.Text.Trim();
  Msg.Subject = this.TextBox2.Text.Trim();
  Msg.HTMLBody = "<html><body>"+this.TextBox3.Text+"</body></html>";
  CDO.IConfiguration Config = Msg.Configuration;
  ADODB.Fields oFields = Config.Fields;
  oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"].Value = 2;
 oFields["http://schemas.microsoft.com/cdo/configuration/sendusername"].Value="rattlesnake";
 oFields["http://schemas.microsoft.com/cdo/configuration/sendpassword"].Value="pass";
 oFields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"].Value=1;
 oFields["http://schemas.microsoft.com/cdo/configuration/languagecode"].Value=0x0804;
 oFields["http://schemas.microsoft.com/cdo/configuration/smtpserver"].Value="smtp.263.net";
 oFields.Update();

  Msg.BodyPart.Charset = "gb2312";
  Msg.HTMLBodyPart.Charset = "gb2312";
 
  Msg.Send();
  Msg = null;
 }
 catch(Exception err)
 {
  throw err;
 }
}  

  5、为Button添加Click事件

private void Button1_Click(object sender, System.EventArgs e)
{
this.CDOsendmail();
}

  运行程序即可。
页: [1]
查看完整版本: [04-09][分享]ASP.NET中自定义控件的创建和使用