ASP.NET中实现模版的动态加载

ASP.NET的工作原理探索 本文比较深入地讨论了ASP.NET程序的工作过程,解释了ASP.NET程序的加载原理。为动态网页设计和开发B/S模式的程序奠定基础 立即下载
ASP.NET中,经常会使用到templates(模版)功能,比如在datagrid,datalist,repeater等控件中,使用templates,将会大大增强其功能。以往,我们一般是在设计程序时,就已经设置好控件中的模版是怎样的了。但是,有的时候,可能我们需要动态加载模版,比如,当你要求你的应用程序的界面风格随着用户的需求而变化时,你就需要到动态加载模版的功能了。但要注意的是,并不是所有的web控件都支持模版功能,而且要注意,哪些控件支持模版的哪些功能,下面简单列出了一些支持模版功能的控件:
  
    Repeater控件,支持的模版有:
  
  HeaderTemplate, FooterTemplate, ItemTemplate, AlternatingItemTemplate, SeperatorTemplate.
  
    Datelist控件,支持的模版有:
  
  HeaderTemplate, FooterTemplate, ItemTemplate, AlternatingItemTemplate, SeparatorTemplate, SelectedItemTemplate, EditItemTemplate.
  
    Datagrid控件,支持的模版有:
  
  HeaderTemplate, FooterTemplate, ItemTemplate, EditItemTemplate, Pager.
  
    下面,我将以动态加载datalist控件的模版来说明如何动态加载模版:
  
    首先来了解动态加载模版的原理。在.NET中,有templatecontrol类,这个类是page和usercontrol类的基类。它也同时定义了page和usercontrol类的基本功能。该类提供了两个方法:loadcontrol和loadtemplate。Loadcontrol方法装载来自外部文件的控件,并且返回usercontrol类对象。而loadtemplate方法加载来自外部文件的模版并且返回的是Itemplate对象。
  
    Loadtemplate方法中,只有一个参数,参数值是外部模版文件的路径,并且返回itemplate对象。而datalist控件提供了一系列的属性,可以设置各种模版的属性,包括有AlternatingItemTemplate, EditItemTemplate, FooterTemplate, HeaderTemplate, ItemTemplate, SelectedItemTemplate, 和 SeperatorTemplate,在下文中,将会看到相关介绍。
  
    接着,我们开始介绍例子,在示例程序中,是使用动态创建数据表和数据列的,并且将数据的创建封装到一个Db类中,好让读者进一步回顾如何动态创建数据表,数据列等,并没用从数据库中提取(当然,你也可以用传统的读取数据库的方法),
  
  public class DB
  {
   public DB()
   { }
   /// <summary>
   /// Method returns a DataSet object filled with data
   /// </summary>
   public static DataSet GetDataSet()
   {
    //创建dataset和datatable
    DataSet ds = new DataSet();
    DataTable table = new DataTable("Records");
    DataColumn col;
    //增加一个列
    col = new DataColumn();
    col.DataType = System.Type.GetType("System.Int32");
    col.ColumnName = "ID";
    col.ReadOnly = true;
    col.Unique = true;
    table.Columns.Add(col);
  
    col = new DataColumn();
    col.DataType = System.Type.GetType("System.String");
    col.ColumnName = "Name";
    col.AutoIncrement = false;
    col.Caption = "Name";
    col.ReadOnly = false;
    col.Unique = false;
    table.Columns.Add(col);
    col = new DataColumn();
    col.DataType = System.Type.GetType("System.String");
    col.ColumnName = "Address";
    col.AutoIncrement = false;
    col.Caption = "Address";
    col.ReadOnly = false;
    col.Unique = false;
    table.Columns.Add(col);
  
    //增加一条记录
    DataRow row = table.NewRow();
    row["ID"] = 1001;
    row["Name"] = "Melanie Giard";
    row["Address"] = "23rd Street, Park Road, NY City, NY";
    table.Rows.Add(row);
    row = table.NewRow();
    row["ID"] = 1002;
    row["Name"] = "Puneet Nehra";
    row["Address"] = "3rd Blvd, Ashok Vihar, New Delhi";
    table.Rows.Add(row);
    row = table.NewRow();
    row["ID"] = 1003;
    row["Name"] = "Raj Mehta";
    row["Address"] = "Nagrath Chowk, Jabalpur";
    table.Rows.Add(row);
    row = table.NewRow();
    row["ID"] = 1004;
    row["Name"] = "Max Muller";
    row["Address"] = "25 North Street, Hernigton, Russia";
    table.Rows.Add(row);
  
    // Add DataTable to DataSet
    ds.Tables.Add(table);
    // Return DataSet
    return ds;
   }
  }
  
    接下来,我们首先创建若干个模版文件。我们先创建两组模版文件,每一组模版文件分别包含有header,footer,item,alternating item四个模版文件,保存成.ascx文件,这样,我们就有两类型风格的模版了,每类型风格的模版中都有自己的header,footer,item,alternating item子模版。下面为其中一个item模版文件,其他的类似。

   <%@ Control Language="VB" %>
  <FONT face="verdana" color="green" size="2"><b>ID: </b>
  <%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "ID") %>
  <b>Name: </b>
  <%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "Name") %>
  <br>
  <b>Address: </b>
  <%# DataBinder.Eval(CType(Container, DataListItem).DataItem, "Address") %>
  <p>
  </FONT>
  
    最后,我们开始创建应用程序,新建一个工程,添加两个按钮和一个datalist控件如下图
  
  [img]http://soft.yesky.com/image20010518/141690.jpg[img]
  之后创建一个binddatagrid的方法,将dataset绑定到datalist控件中去,代码如下:
  private void BindDataGrid()
  {
   dtSet = DB.GetDataSet();
   DataList1.DataSource = dtSet.Tables[0].DefaultView;
   DataList1.DataBind();
  }
  private void Page_Load(object sender, System.EventArgs e)
  {
   if(!IsPostBack)
   {
    BindDataGrid();
   }
  }
    最后,分别为两个按钮的clcik事件添加代码,分别使用page.loadtemplate方法去加载我们已经写好的两套模版组中的模版,代码如下。
  private void Button1_Click(object sender, System.EventArgs e)
  {
   // Load templates
   DataList1.AlternatingItemTemplate =
   Page.LoadTemplate("AltItemTempate.ascx");
   DataList1.ItemTemplate =Page.LoadTemplate("ItemTemplate.ascx");
   DataList1.HeaderTemplate =Page.LoadTemplate("HeadTemplate.ascx");
   DataList1.FooterTemplate = Page.LoadTemplate("FootTemplate.ascx");
   BindDataGrid();
  }
  private void Button2_Click(object sender, System.EventArgs e)
  {
   // Load templates
   DataList1.AlternatingItemTemplate =Page.LoadTemplate("AltItemTempate2.ascx");
   DataList1.ItemTemplate = Page.LoadTemplate("ItemTemplate2.ascx");
   DataList1.HeaderTemplate = Page.LoadTemplate("HeadTemplate2.ascx");
   DataList1.FooterTemplate = Page.LoadTemplate("FootTemplate2.ascx");
   BindDataGrid();
  }
    运行效果如下两图,当点不同的按钮时,动态装载不同的模版风格。

5G射频设计中N77&N79的PRX为什么需要3个SRS 首先,我们来逐个拆解一下这个神秘的“ 阅读详情

相关推荐

FPGA波束形成:从算法到硬件的艺术之旅

本文深入探讨了FPGA在波束形成技术中的应用,从算法原理到Verilog硬件实现的全过程。文章详细分析了FPGA并行处理、低延迟和可重构特性如何优化波束形成系统性能,并提供了Verilog关键模块代码示例和资源优化策略,为工程师实现高效FPGA波束形成解决方案提供实用指导。

tea88的博客 1046

动态加载主题

          None        gvFirstSkin        gvSecondSkin                            AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDSCatalog">                                         

kevin 751

28377D Bootloader

架构

a6100309120的博客 6013

MVC 后端根据图片路径,读取图片成为文件流,显示到页面的img中。(js处理图片文件流,设置到img的src属性中)

1、根据图片名称读取文件流 public static byte[] GetBytesFromImage(string filename) { try { FileStream fs = new FileStream(filename, FileMode.Open, FileAcc...

glmushroom的专栏 7062

Uniapp H5端SEO优化全攻略:提升搜索引擎排名与流量

在移动互联网时代,H5页面因其跨平台、低成本、易传播的特性,成为许多企业的首选。Uniapp作为一款优秀的前端跨端开发框架,能够快速开发H5、小程序、App等多端应用。然而,由于Uniapp默认采用SPA(单页应用)架构,H5端在SEO(搜索引擎优化)方面存在一定劣势,如爬虫难以抓取动态内容、页面标题和描述不易优化等。 本文将系统性地介绍Uniapp H5端的SEO优化方案,涵盖基础优化、SPA优化策略、内容优化、技术优化、外部优化及监测分析,帮助开发者提升网站在搜索引擎中的排名,获取更多自然流量。

vvilkin的学习备忘 1973

Windows 11 上 WSL2 安装 Ubuntu 22.04 保姆级教程(含桌面环境配置)

本文提供在Windows 11上通过WSL2安装Ubuntu 22.04并配置桌面环境的详细教程。涵盖WSL2核心安装、性能调优、Xfce桌面环境部署以及开发环境集成,帮助开发者构建高效、无缝的Windows-Linux混合开发工作站。

Jerry的专栏 634

asp.net 动态加载主题

asp.net 动态加载主题   在下拉菜单中选择主题1 就会变成主题1 的样式。选择主题2 就变主题2 的样式。如图     主页代码 无标题页 动态加载主题 选择主题 <

zscmj的专栏 1684

蓝牙抓包实战:用nrf52840和Wireshark解析广播包与SCAN_RSP的完整流程

本文提供了一份完整的蓝牙抓包实战指南,详细介绍了如何使用nRF52840 Dongle和Wireshark捕获并解析蓝牙广播包与SCAN_RSP。内容涵盖环境搭建、广播事件分析、数据包结构拆解以及常见连接问题的调试技巧,旨在帮助开发者和物联网工程师深入理解BLE底层通信,提升硬件调试能力。

weixin_29279153的博客 496

ASP.NET中实现模版的动态加载(转)

ASP.NET中,经常会使用到templates(模版)功能,比如在datagrid,datalist,repeater等控件中,使用templates,将会大大增强其功能。以往,我们一般是在设计程序时,就已经设置好控件中的模版是怎样的了。但是,有的时候,可能我们需要动态加载模版,比如,当你要求你的应用程序的界面风格随着用户的需求而变化时,你就需要到动态加载模版的功能了。但要注意的是,并不是所有的...

weixin_30723433的博客 61

手把手教你构建轻量级CLIP模型:从理论到实践

本文手把手教你从零构建一个轻量级CLIP模型,深入解析其核心原理——对比学习,并提供完整的代码实践。通过精简的模型架构、数据准备和训练循环实现,帮助读者彻底理解多模态模型如何让图像与文本在共享空间中对齐,为学习更复杂的AI模型打下坚实基础。

weixin_29100927的博客 326

网络工程师教程第6版(2024年最新版)

本书 根据《网络工程师考试大纲》(2024年审定通过)编写,对网络工程师岗位所要求的主要知 识及应用技术进行了阐述。本书主要内容包括数据通信、局域网、无线通信网、网络互连、网络安全、网络操作系统与应用服务器、组网技术、网络管理、网络规划和设计。本书是参加网络工程师考试的必备教材,也可作为网络工程从业人员学习网络技术的教材或日常工作的参考用书。王涛和严体华编写了第2章、第3章和第4章;网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。

鹿鸣天涯 6908
上一篇: 如何使用PHP通过SMTP发送电子邮件
下一篇: 用ASP.NET 2.0实现AJAX风格的Web开发
mzphp
博客等级 码龄21年 9粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值