IT技术博客大学习 共学习 共进步

动态加载用户控件到Template

记事本 2010-07-25 22:32:25 浏览 2,624 次

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. 图片轮播控件 Carousel Controls (阅读 3,523)
  2. 为什么说基于ActiveX的“安全控件”一定是不安全的 (阅读 3,343)
  3. 动态加载Innodb Plugin (阅读 3,221)
  4. Android注解式绑定控件,没你想象的那么难 (阅读 2,921)
  5. 禁用或启用一个ValidationGroup里的全部验证控件 (阅读 2,860)
  6. jquery js 动态加载 js文件 (阅读 2,220)