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();
}
运行程序即可。