Repeater控件和DataList控件,可以用來一次顯示一組數據項。比如,可以用它們顯示一個數據表中的所有行。
Repeater控件完全由模板驅動,提供了最大的靈活性,可以任意設置它的輸出格式。DataList控件也由模板驅動,和Repeater不同的是,DataList默認輸出是HTML表格,DataList將數據源中的記錄輸出為HTML表格一個個的單元格 。
1、Repeater支持以下5種模板:
● ItemTemplate : 對每一個數據項進行格式設置 (包含要為數據源中每個數據項都要呈現一次的 HTML 元素和控件。)。
● AlternatingItemTemplate : 對交替數據項進行格式設置(包含要為數據源中每個數據項都要呈現一次的 HTML 元素和控件。)。
● SeparatorTemplate : 對分隔符進行格式設置(包含在每項之間呈現的元素。)。
● HeaderTemplate : 對頁眉進行格式設置(包含在列表的開始處分別呈現的文本和控件。)。
● FooterTemplate : 對頁腳進行格式設置(包含在列表的結束處分別呈現的文本和控件。)。
示例一:(基本演示)
aspx頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RepeaterDemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptPeople" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td>姓名</td>
<td>年齡</td>
<td>性別</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
cs頁面:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace RepeaterDemo
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<People> peopleList = new List<People>();
peopleList.Add(new People("韓兆新",24,Sex.男));
peopleList.Add(new People("XXXX", 25, Sex.女));
peopleList.Add(new People("YYYY", 20, Sex.男));
peopleList.Add(new People("ZZZZ", 23, Sex.男));
peopleList.Add(new People("AAAA", 23, Sex.女));
peopleList.Add(new People("BBBB", 18, Sex.女));
rptPeople.DataSource = peopleList;
rptPeople.DataBind();
}
}
public enum Sex
{
男 = 2,
女 = 1,
};
public class People
{
public People(string name, uint age, Sex sex)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
}
public string Name
{get;set;}
public uint Age
{ get; private set; }
public Sex Sex
{ get; private set; }
}
}
示例二:(AlternatingItemTemplate 模板)
aspx頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RepeaterDemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptPeople" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td>姓名</td>
<td>年齡</td>
<td>性別</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background:gray">
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
示例三:(SeparatorTemplate模板)
aspx頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RepeaterDemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptPeople" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td>姓名</td>
<td>年齡</td>
<td>性別</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background:gray">
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
</tr>
</AlternatingItemTemplate>
<SeparatorTemplate>
<tr style="background:red">
<td>123</td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
2、Repeater控件的嵌套:
示例一:(Repeater控件嵌套演示:操作子Repeater控件)
aspx頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RepeaterDemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptPeople" runat="server"
onitemdatabound="rptPeople_ItemDataBound">
<HeaderTemplate>
<table border="1">
<tr>
<td>姓名</td>
<td>年齡</td>
<td>性別</td>
<td>書籍類別</td>
<td>書籍名稱</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
<td>
<table>
<tr><td>文學類:</td></tr>
<tr><td>科學類:</td></tr>
<tr><td>哲學類:</td></tr>
</table>
</td>
<td>
<table>
<tr>
<asp:Repeater ID="rptLiterary" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptScientific" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptPhilosophic" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background:gray">
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
<td>
<table>
<tr><td>文學類:</td></tr>
<tr><td>科學類:</td></tr>
<tr><td>哲學類:</td></tr>
</table>
</td>
<td>
<table>
<tr>
<asp:Repeater ID="rptLiterary" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptScientific" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptPhilosophic" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
</td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
cs頁面:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace RepeaterDemo
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<People> peopleList = new List<People>();
peopleList.Add(new People("韓兆新",24,Sex.男));
peopleList.Add(new People("XXXX", 25, Sex.女));
peopleList.Add(new People("YYYY", 20, Sex.男));
peopleList.Add(new People("ZZZZ", 23, Sex.男));
peopleList.Add(new People("AAAA", 23, Sex.女));
peopleList.Add(new People("BBBB", 18, Sex.女));
rptPeople.DataSource = peopleList;
rptPeople.DataBind();
}
protected void rptPeople_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
List<string> literaryList = new List<string>();
literaryList.Add("《借我一生》");
literaryList.Add("《追風箏的人》");
literaryList.Add("《山居筆記》");
List<string> scientificList = new List<string>();
scientificList.Add("《時間簡史》");
scientificList.Add("《果殼中的宇宙》");
scientificList.Add("《時空的未來》");
List<string> philosophicList = new List<string>();
philosophicList.Add("《周易正義》");
philosophicList.Add("《蘇菲的世界》");
philosophicList.Add("《理想國》");
Repeater rptLiterary = e.Item.FindControl("rptLiterary") as Repeater;
rptLiterary.DataSource = literaryList;
rptLiterary.DataBind();
Repeater rptScientific = e.Item.FindControl("rptScientific") as Repeater;
rptScientific.DataSource = scientificList;
rptScientific.DataBind();
Repeater rptPhilosophic = e.Item.FindControl("rptPhilosophic") as Repeater;
rptPhilosophic.DataSource = philosophicList;
rptPhilosophic.DataBind();
}
}
}
public enum Sex
{
男 = 2,
女 = 1,
};
public class People
{
public People(string name, uint age, Sex sex)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
}
public string Name
{get;set;}
public uint Age
{ get; private set; }
public Sex Sex
{ get; private set; }
}
}
示例二:(Repeater控件嵌套:獲取父Repeater控件的值)
aspx頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="RepeaterDemo._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater ID="rptPeople" runat="server"
onitemdatabound="rptPeople_ItemDataBound">
<HeaderTemplate>
<table border="1">
<tr>
<td>姓名</td>
<td>年齡</td>
<td>性別</td>
<td>書籍類別</td>
<td>書籍名稱</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
<td>
<table>
<tr><td>文學類:</td></tr>
<tr><td>科學類:</td></tr>
<tr><td>哲學類:</td></tr>
</table>
</td>
<td>
<table>
<tr>
<asp:Repeater ID="rptLiterary" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptScientific" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptPhilosophic" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background:gray">
<td><%#DataBinder.Eval(Container.DataItem,"Name") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Age") %></td>
<td><%#DataBinder.Eval(Container.DataItem,"Sex") %></td>
<td>
<table>
<tr><td>文學類:</td></tr>
<tr><td>科學類:</td></tr>
<tr><td>哲學類:</td></tr>
</table>
</td>
<td>
<table>
<tr>
<asp:Repeater ID="rptLiterary" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptScientific" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
<tr>
<asp:Repeater ID="rptPhilosophic" runat="server">
<ItemTemplate>
<td><%#Container.DataItem %></td>
</ItemTemplate>
</asp:Repeater>
</tr>
</table>
</td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
cs頁面:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace RepeaterDemo
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
List<People> peopleList = new List<People>();
peopleList.Add(new People("韓兆新",24,Sex.男));
peopleList.Add(new People("XXXX", 25, Sex.女));
peopleList.Add(new People("YYYY", 20, Sex.男));
peopleList.Add(new People("ZZZZ", 23, Sex.男));
peopleList.Add(new People("AAAA", 23, Sex.女));
peopleList.Add(new People("BBBB", 18, Sex.女));
rptPeople.DataSource = peopleList;
rptPeople.DataBind();
}
protected void rptPeople_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
People people = e.Item.DataItem as People;
string str = people.Name + "讀:";
List<string> literaryList = new List<string>();
literaryList.Add(str + "《借我一生》");
literaryList.Add(str + "《追風箏的人》");
literaryList.Add(str + "《山居筆記》");
List<string> scientificList = new List<string>();
scientificList.Add(str + "《時間簡史》");
scientificList.Add(str + "《果殼中的宇宙》");
scientificList.Add(str + "《時空的未來》");
List<string> philosophicList = new List<string>();
philosophicList.Add(str + "《周易正義》");
philosophicList.Add(str + "《蘇菲的世界》");
philosophicList.Add(str + "《理想國》");
Repeater rptLiterary = e.Item.FindControl("rptLiterary") as Repeater;
rptLiterary.DataSource = literaryList;
rptLiterary.DataBind();
Repeater rptScientific = e.Item.FindControl("rptScientific") as Repeater;
rptScientific.DataSource = scientificList;
rptScientific.DataBind();
Repeater rptPhilosophic = e.Item.FindControl("rptPhilosophic") as Repeater;
rptPhilosophic.DataSource = philosophicList;
rptPhilosophic.DataBind();
}
}
}
public enum Sex
{
男 = 2,
女 = 1,
};
public class People
{
public People(string name, uint age, Sex sex)
{
this.Name = name;
this.Age = age;
this.Sex = sex;
}
public string Name
{get;set;}
public uint Age
{ get; private set; }
public Sex Sex
{ get; private set; }
}
}
