以编程方式设置Repeater控件模板示例

数据绑定控件Repeater有好几个模板,如HeaderTemplate、FooterTemplate和ItemTemplate等,它们都是ITemplate接口类型,因而,要以编程方式设置Repeater控件模板,只需给相应模板属性赋值一个ITemplate接口类型实例即可。下边是一个简单示例:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

/// <summary>
/// 自定义模板类
///     实现了ITemplate接口
/// </summary>
public class CustomTemplate : ITemplate
{
    /// <summary>
    /// ITemplate接口成员
    /// </summary>
    /// <param name="container"></param>
    public void InstantiateIn(Control container)
    {
        Label label = new Label();
        //在绑定数据源时设置内容
        label.DataBinding += new EventHandler(DataBinding);

        container.Controls.Add(label);
    }

    /// <summary>
    /// 绑定数据时发生
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void DataBinding(object sender, EventArgs e)
    {
        Label label = sender as Label;
        if (label != null)
        {
            /*
             *
             * 步骤:
             * 1).获取数据绑定控件(Repeater、DataList、DataGrid)中的项
             * 2).从行控件中获取数据赋值给Label控件
             *
            */

            IDataItemContainer container = null;
            if (label.NamingContainer is RepeaterItem) //label.NamingContainer即为数据绑定控件的项
                container = (RepeaterItem)label.NamingContainer;
            else if (label.NamingContainer is DataListItem)
                container = (DataListItem)label.NamingContainer;
            else if (label.NamingContainer is DataGridItem)
                container = (DataGridItem)label.NamingContainer;

            if (container != null)
                label.Text = DataBinder.Eval(container.DataItem, "ProductName", null);
        }
    }
}

客户端调用:

using System;
using System.Data;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Repeater1.ItemTemplate = new CustomTemplate();//设置模板
        DataList1.ItemTemplate = new CustomTemplate();//设置模板

        using (SqlConnection conn = new SqlConnection("server=(local);database=Northwind;user id=sa;password=sa;"))
        {
            using (SqlDataAdapter adapter = new SqlDataAdapter("Select * FROM Products", conn))
            {
                DataTable table = new DataTable();
                adapter.Fill(table);

                Repeater1.DataSource = table;
                Repeater1.DataBind();

                DataList1.DataSource = table;
                DataList1.DataBind();
            }
        }
            
    }
}


评论: 0 | 引用: 0 | 查看次数: 4441
发表评论
登录后再发表评论!