IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

动态加载用户控件到Template

记事本 2010-07-25 22:32:25 累计浏览 2,703 次
本机暂存

1. 创建一个用户控件。

以下是代码片段:
namespace Northwind.WebSite.UserControls
{
    public partial class CategoryDetail : System.Web.UI.UserControl
    {
        private Category category;
        public Category Category
        {
            set { category = value; }
            get { return category; }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void Page_PreRender(object sender, EventArgs e)
        {
            GridViewProducts.DataSource = category.Products;
            GridViewProducts.DataBind();
            LableCategoryName.Text = category.CategoryName;
            LabelTotalPrice.Text = string.Format("Total price: {0}",
                category.Products.Sum(p =>
                    p.UnitPrice * (p.UnitsInStock + p.UnitsOnOrder)));
        }
        public void ExpandCollapsiblePanel()
        {
            CollapsiblePanelExtender1.Collapsed = false;
        }
    }
}

2. 实现ITemplate。

以下是代码片段:
namespace Northwind.WebSite.TemplateControl
{
    public class CategoryDetailTemplate : ITemplate
    {
        public void InstantiateIn(Control container)
        {
            CategoryDetail detail = (CategoryDetail)BuildManager.
                CreateInstanceFromVirtualPath("~/UserControls/CategoryDetail.ascx", typeof(CategoryDetail));
            container.DataBinding += delegate(object sender, EventArgs e)
            {
                IDataItemContainer container1 = container as IDataItemContainer;
                detail.Category = (Category)container1.DataItem;
                if (container1.DataItemIndex == 0)
                {
                    detail.ExpandCollapsiblePanel();
                }
            };
            container.Controls.Add(detail);
        }
    }
}

3. 动态加载。

以下是代码片段:
namespace Northwind.WebSite
{
    public partial class ProductsByCategory : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Repeater1.ItemTemplate = new CategoryDetailTemplate();
            if (!IsPostBack)
            {
                var ds = Category.GetCategories();
                Repeater1.DataSource = ds;
                Repeater1.DataBind();
            }
        }
    }
}

同分类推荐文章

  1. 等了十年的 Go 链式管道,终于来了:seq 让你像写 Scala 一样写 Go (2026-06-25 18:38:18)
  2. Go 实验特性详解 (2026-06-21 10:05:27)
  3. amd64 微架构级别对 Go 程序性能提升多少? (2026-06-21 09:38:49)

查看更多 后端 文章 →

建议继续学习

  1. 为什么国内还有那么多网站使用.NET架构? (累计阅读 5,243)
  2. 《解剖PetShop》系列之二 (累计阅读 3,210)
  3. 禁用或启用一个ValidationGroup里的全部验证控件 (累计阅读 2,942)
  4. 《解剖PetShop》系列之四 (累计阅读 2,796)
  5. JS文件装载器(Eve Js Loader) (累计阅读 2,715)
  6. 《解剖PetShop》系列之六 (累计阅读 2,674)
  7. Android安全–DexClassLoader动态加载分析 (累计阅读 1,208)