架构深渊

慢慢走进程序的深渊……关注领域驱动设计、测试驱动开发、设计模式、企业应用架构模式……积累技术细节,以设计架构为宗。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

ASP.NET数据控件的自定义模板

Posted on 2009-01-10 17:45  chen eric  阅读(440)  评论(0编辑  收藏  举报
DataGrid,DataList,Repeater三个数据控件都支持模板功能,比如下面是DataList的项模板,

<asp:DataList id="DataList1" runat="server" EnableViewState="False">
    
<ItemTemplate>
        
<%# DataBinder.Eval(Container, "DataItem.id"%>
    
</ItemTemplate>
</asp:DataList>

在一般情况下,这个模板是我们在程序设计的时候写死的,现在我们要做的是怎么在运行时动态改变模板项的定义。

首先新建一个ASCX用户自定义控件,内容如下:

<TABLE id="Table1" cellSpacing="0" cellPadding="0" width="100%" border="1">
    
<TR>
        
<TH>操作</TH>
        
<TH>用户名</TH>
        
<TH>论坛ID</TH>
        
<TH>电子邮件</TH>
        
<TH>配额</TH>
        
<TH>管理员</TH>
    
</TR>
    
<TR>
        
<TD><%# DataBinder.Eval(Container, "DataItem.id"%></TD>
        
<TD><%# DataBinder.Eval(Container, "DataItem.uid"%></TD>
        
<TD><%# DataBinder.Eval(Container, "DataItem.BBSID","<a href=""javascript:showbbsid('{0}');"">{0}</a>"%></TD>
        
<TD><%# DataBinder.Eval(Container, "DataItem.email"%></TD>
        
<TD><%# DataBinder.Eval(Container, "DataItem.pur"%></TD>
        
<TD><%# DataBinder.Eval(Container, "DataItem.op"%></TD>
    
</TR>
    
<TR>
        
<TD colspan="6">
            
<TABLE id="Table2" cellSpacing="0" cellPadding="0" width="100%" border="0">
                
<TR>
                    
<TD>申请理由:</TD>
                
</TR>
                
<TR>
                    
<TD><%# DataBinder.Eval(Container, "DataItem.memostr"%></TD>
                
</TR>
                
<TR>
                    
<TD><HR></TD>
                
</TR>
                
<TR>
                    
<TD>认证说明:</TD>
                
</TR>
                
<TR>
                    
<TD><%# DataBinder.Eval(Container, "DataItem.excuse"%></TD>
                
</TR>
            
</TABLE>
        
</TD>
    
</TR>
</TABLE>


当然,上面例举的只是一个示例,你也可以自己建立一个模板文件,要注意的是,扩展名必须为.ascx,代码的规范必须模板列的规则。

建好模板后,我们要做的就是怎么在程序里调用了,第一步,先在页面的相应位置添加一个空白的Datalist控件,在Page_Load事件里加上一句代码:

DataList1.ItemTemplate 
= Page.LoadTemplate("test.ascx"

然后就可以绑定数据库了。。。怎么样?简单吗?