</TR> </TABLE> 注:在这个页子的其它地方,你想放啥控件,就放吧,都可以被继承到你的其它页面中了。 aspx.cs代码:《××× 下面的这个CS代码你要好好的看一下。××××》 public class mlContainer: System.Web.UI.UserControl { public ItemContainer Container1;
System.Web.UI.ITemplate m_ItemTemplate1;
[ System.Web.UI.TemplateContainer(typeof(ItemContainer)) ] public virtual System.Web.UI.ITemplate ItemTemplate1 { get { return this.m_ItemTemplate1; } set { this.m_ItemTemplate1 = value; } }
用户控件所公布出来的属性 都是string类型来显示的。非常之不方便。比如我有一个gridview
在父窗体中有3列,可是在我需要的子窗体中要修改成n列。要是能在子窗体中也能对其进行鼠标右键式的操作就好了。
CS文件里一样可以用
1、定义一个模板文件(这个文件里可以什么都没有代码如下:)
aspx文件:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="ItemContainer.ascx.cs" Inherits="Com.Web.UserControlLib.Templates.ItemContainer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %> aspx.cs文件: using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls; /// <summary>
/// ItemContainer 的摘要说明。
/// </summary>
public class ItemContainer : System.Web.UI.UserControl
{ private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
} #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
注意看一下,其实这里就是一个空的用户控件2、现在可以定义模板控件了 aspx:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="mlContainer.ascx.cs" Inherits="Com.Web.UserControlLib.Templates.mlContainer" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<!-- 注意下面这一行 -->
<%@ Register TagPrefix="uc1" TagName="ItemContainer" Src="ItemContainer.ascx" %><TABLE>
<TR>
<TD colSpan="2" align="center" valign="top">
在这里放一行试试看,是不是可以被继承,哈哈。
</TD>
</TR>
<TR>
<TD colSpan="2" align="center" valign="top" ><br>
<!-- 注意下面这一行,相当于占位符 -->
<uc1:ItemContainer id="Container1" runat="server"></uc1:ItemContainer>
</TD>
</TR>
</TABLE> 注:在这个页子的其它地方,你想放啥控件,就放吧,都可以被继承到你的其它页面中了。 aspx.cs代码:《××× 下面的这个CS代码你要好好的看一下。××××》 public class mlContainer: System.Web.UI.UserControl
{
public ItemContainer Container1;
System.Web.UI.ITemplate m_ItemTemplate1;
[
System.Web.UI.TemplateContainer(typeof(ItemContainer))
]
public virtual System.Web.UI.ITemplate ItemTemplate1
{
get
{
return this.m_ItemTemplate1;
}
set
{
this.m_ItemTemplate1 = value;
}
}
protected override void CreateChildControls()
{
if (this.m_ItemTemplate1 != null && this.Container1 != null)
{
this.m_ItemTemplate1.InstantiateIn(this.Container1);
}
base.CreateChildControls();
}
}三、使用模板控件页:
<%@ Register TagPrefix="UC" TagName="MyContainer" Src="/UserControlLib/Templates/mlContainer.ascx" %>
<UC:MyContainer id="MyContainer1" runat="server">
<ItemTemplate1>
这里面你可以放其它的东西了,表格控件都行,随便放了。
</ItemTemplate1>
</UC:MyContainer>看到了吧,这里就把模板控件里的东西继承过来了。
用户控件所公布出来的属性 都是string类型来显示的。非常之不方便。比如我有一个gridview
在父窗体中有3列,可是在我需要的子窗体中要修改成n列。要是能在子窗体中也能对其进行鼠标右键式的操作就好了。-----------------------呵呵,晕,你给用户控件写个属性,把这个属性与你用户控件中的列表的列数对应不就行了吗?楼主,你别太想省事了。