自定义服务器控件ViewSuo的源文件
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Drawing;
namespace oa.cls
{
/// <summary>
/// 查看事务所详细信息的自定义服务器控件
/// </summary>
[ToolboxData("<{0}:ViewSuo runat=server></{0}:ViewSuo>")]
public class ViewSuo : System.Web.UI.WebControls.WebControl, INamingContainer
{
private DataSet dataSource;
/// <summary>
/// 设置数据源
/// </summary>
[Bindable(true),
Category("Data"),
DefaultValue(null),
Description("设置数据源"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public DataSet DataSource
{
get
{
return dataSource;
}
set
{
dataSource = value;
}
}
protected override void Render(HtmlTextWriter output)
{
PrepareControlHierarchy();
RenderContents(output);
}
private void PrepareControlHierarchy()
{
if (HasControls() == false)
return;
}
protected override void CreateChildControls()
{
Controls.Clear();
if (Page.IsPostBack)
CreateControlHierarchy(false);
}
public override void DataBind()
{
base.OnDataBinding(EventArgs.Empty);
Controls.Clear();
ClearChildViewState();
CreateControlHierarchy(true);
ChildControlsCreated = true;
}
protected override void TrackViewState()
{
base.TrackViewState();
}
/// <summary>
/// 这里是主要实现输出的方法,用DataList来完成输出,模板SuoTemplate是详细实现细节.
/// 其它部分都可以套用,自定义的属性都在这里设置,比如说DataList显示的列数,宽,高等.
/// </summary>
/// <param name="useDataSource"></param>
private void CreateControlHierarchy( bool useDataSource )
{
DataList dl = new DataList();
dl.RepeatColumns = 1;
dl.RepeatDirection = RepeatDirection.Vertical;
dl.ID = "productList";
dl.ItemTemplate = new SuoTemplate();
dl.ItemStyle.Width = new Unit(500, UnitType.Pixel);
dl.Width = new Unit(650, UnitType.Pixel);
Controls.Add( dl );
if (useDataSource == true )
{
dl.DataSource = dataSource.Tables[0];
dl.DataBind();
}
}
}
}
ViewSuo控件中用到的SuoTemplate模板的源文件
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Drawing;
using System.Text;
namespace oa.cls
{
public class SuoTemplate : ITemplate
{
public SuoTemplate() { }
public void InstantiateIn( Control container )
{
Literal l = new Literal();
l.DataBinding += new EventHandler(this.BindData);
container.Controls.Add( l );
}
/// <summary>
/// 在这个方法里控制模板的主要输出,其中用到了数据绑定的一些内容
/// 要改变显示在这里修改
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void BindData( object sender, EventArgs e)
{
Literal l = (Literal)sender;
DataListItem container = (DataListItem)l.NamingContainer;
DataRowView currentRowView = (DataRowView) container.DataItem;
//HttpContext ht = HttpContext.Current;
StringBuilder sb = new StringBuilder();
sb.Append("<table width=/"100%/" border=/"0/" align=/"center/">");
sb.Append(" <tr>");
sb.Append(" <td width=/"17%/" align=/"right/"><strong>事务所名称:</strong></td>");
sb.Append(" <td width=/"26%/">"+currentRowView["name"]+"</td>");
sb.Append(" <td width=/"19%/" align=/"right/"><strong>主任:</strong></td>");
sb.Append(" <td width=/"38%/">"+currentRowView["zhuren"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>许可证号:</strong></td>");
sb.Append(" <td>"+currentRowView["zhiye"]+"</td>");
sb.Append(" <td align=/"right/"><strong>编 制:</strong></td>");
sb.Append(" <td>"+currentRowView["bianzhi"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>组织形式:</strong></td>");
sb.Append(" <td>"+currentRowView["zuzhi"]+"</td>");
sb.Append(" <td align=/"right/"><strong>隶属关系:</strong></td>");
sb.Append(" <td>"+currentRowView["lishu"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>主管机关:</strong></td>");
sb.Append(" <td>"+currentRowView["zhuguan"]+"</td>");
sb.Append(" <td align=/"right/"><strong>年 检:</strong></td>");
sb.Append(" <td>"+currentRowView["nianshen"]+"</td>");
sb.Append(" </tr>");
sb.Append("</table>");
sb.Append("<table width=/"100%/" border=/"0/" align=/"center/">");
sb.Append(" <tr>");
sb.Append(" <td width=/"17%/" align=/"right/"><strong>设立时间:</strong></td>");
sb.Append(" <td width=/"26%/">"+currentRowView["sheli"]+"</td>");
sb.Append(" <td width=/"19%/" align=/"right/"><strong>区 域:</strong></td>");
sb.Append(" <td width=/"38%/">"+currentRowView["quyu"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td height=/"16/" align=/"right/"><strong>律 师:</strong></td>");
sb.Append(" <td>"+currentRowView["lvshi"]+"</td>");
sb.Append(" <td align=/"right/"><strong>电 话:</strong></td>");
sb.Append(" <td>"+currentRowView["phone"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>律师助理:</strong></td>");
sb.Append(" <td> </td>");
sb.Append(" <td align=/"right/"><strong>传 真:</strong></td>");
sb.Append(" <td>"+currentRowView["zhuli"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>行政人员:</strong></td>");
sb.Append(" <td>"+currentRowView["xingzheng"]+"</td>");
sb.Append(" <td align=/"right/"><strong>网 址:</strong></td>");
sb.Append(" <td>"+currentRowView["huji"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>专业资格:</strong></td>");
sb.Append(" <td>"+currentRowView["zige"]+"</td>");
sb.Append(" <td align=/"right/"><strong>主任手机:</strong></td>");
sb.Append(" <td>"+currentRowView["shouji"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>固定资产:</strong></td>");
sb.Append(" <td>"+currentRowView["zichan"]+"</td>");
sb.Append(" <td align=/"right/"><strong>邮 编:</strong></td>");
sb.Append(" <td>"+currentRowView["zip"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>经 费:</strong></td>");
sb.Append(" <td>"+currentRowView["jingfei"]+"</td>");
sb.Append(" <td align=/"right/"><strong>地 址:</strong></td>");
sb.Append(" <td>"+currentRowView["dizhi"]+"</td>");
sb.Append(" </tr>");
sb.Append(" <tr>");
sb.Append(" <td align=/"right/"><strong>分所情况:</strong></td>");
sb.Append(" <td colspan=/"3/">"+currentRowView["fensuo"]+"</td>");
sb.Append(" </tr>");
sb.Append("</table>");
l.Text = sb.ToString();
}
}
}
测试自定义控件的前台页代码
<%@ Page language="c#" Codebehind="0.aspx.cs" AutoEventWireup="false" Inherits="oa._0" %>
<%@ Register TagPrefix="wawa" Namespace="oa.cls" Assembly="oa"%>
<!--在使用自定义控件前需要先用Register关键字注册,Assembly属性设置应用程序的名字就可以,就是BIN目录下的那个主DLL的名字->
<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>0</title>
<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="FlowLayout">
<form id="Form1" method="post" runat="server">
<!--在这里放置一个自定义控件-->
<wawa:ViewSuo id="suo1" runat="server" />
</form>
</body>
</HTML>
页面后台代码
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 oa
{
public class _0 : System.Web.UI.Page
{
protected oa.cls.ViewSuo suo1;
private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
//为自定义web控件设置数据源并绑定数据
suo1.DataSource=oa.cls.globalstate.GetDataSetByStr("select top 1 * from suo",null);
suo1.DataBind();
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}