前几天,项目中需要实现动态生成Repeater并绑定数据的功能,记录一下实现的方法
一、使用模板实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace RepeaterDemo
{
public class RepeaterTemplet : ITemplate
{
ListItemType templateType;//列表控件类型
string headerText = string.Empty;//表头数据 html
string columns = string.Empty;//绑定数据列名 格式"UserName,"
/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <param name="headertext"></param>
/// <param name="columninfo"></param>
public RepeaterTemplet(ListItemType type, string headertext, string columninfo)
{
templateType = type;
headerText = headertext;
columns = columninfo;
}
/// <summary>
///
/// </summary>
/// <param name="container"></param>
public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch (templateType)
{
case ListItemType.Header:
lc.Text = headerText;
break;
case ListItemType.Item:
lc.DataBinding += new EventHandler(TemplateControl_DataBinding);
break;
case ListItemType.AlternatingItem:
lc.Text = "<TR><TD bgcolor=lightblue>Item number:1</TD></TR>";
break;
case ListItemType.Footer:
lc.Text = "</TABLE>";
break;
}
container.Controls.Add(lc);
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
Literal lc;
lc = (Literal)sender;
RepeaterItem container = (RepeaterItem)lc.NamingContainer;
string itemText = "<tbody><tr>";
string []columnsInfo = columns.Split(',');
for (int i = 0; i < columnsInfo.Length; i++)
{
itemText += "<td>" + DataBinder.Eval(container.DataItem, columnsInfo[i]) + "</td>";
}
itemText += "</tr></tbody>";
lc.Text = itemText;
}
}
}
调用示例
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("UserID",typeof(string));
dt.Columns.Add("UserName", typeof(string));
dt.Columns.Add("Tel", typeof(string));
for (int i = 0; i < 10; i++)
{
dt.Rows.Add((i+1).ToString(),"Test"+i,i.ToString());
}
string headerText = "<table class=\"table table-bordered table-hover\"><thead><tr><th>用户编号</th><th>用户姓名</th></tr></thead>";
string columns = "UserID,UserName";
rept.HeaderTemplate = new RepeaterTemplet(ListItemType.Header ,headerText,"");
rept.ItemTemplate = new RepeaterTemplet(ListItemType.Item, "", columns);
rept.FooterTemplate = new RepeaterTemplet(ListItemType.Footer, "", "");
rept.DataSource = dt;
rept.DataBind();
}
二、使用控件asp:Literal实现
将数据拼接成html字符串(table),将html字符串赋值给该控件,在前台页面输出
//前台
<asp:Literal runat="server" ID="htmltext"></asp:Literal>
//后台 testhtml为html格式的字符串
htmltext.Text=testhtml;