ASP.NET Repeater_01_基本用法
Repeater 控件基本用法
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Web.UI" %>
<!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 id="Head1" runat="server">
<title></title>
<script runat="server">1:
2: protected void Page_Load(object sender, EventArgs e)3: {
4: if (!IsPostBack)5: {
6: this.Bind();7: }
8: }
9: private void Bind()10: {
11: DataTable dt = ASPDotNetRepeater.DataSource.CreateDataSource();
12: this.Repeater1.DataSource = dt;13: this.Repeater1.DataBind();14:
15: this.Repeater2.DataSource = dt;16: this.Repeater2.DataBind();17: }
18:
</script>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td style="width: 200px; vertical-align: top;">
<table>
<asp:Repeater ID="Repeater1" runat="server">
<HeaderTemplate>
<tr>
<td>
数字
</td>
<td>
平方
</td>
<td>
立方
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "number")%>
</td>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "square")%>
</td>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "cube")%>
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "number")%>
</td>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "square")%>
</td>
<td>
<%1: # DataBinder.Eval(Container.DataItem, "cube")%>
</td>
</tr>
</AlternatingItemTemplate>
</asp:Repeater>
</table>
</td>
<td style="width: 600px; vertical-align: top;">
<table>
<asp:Repeater ID="Repeater2" runat="server">
<ItemTemplate>
<%1: # DataBinder.Eval(Container.DataItem,"number")%><sup>2</sup>=<%1: # DataBinder.Eval(Container.DataItem, "square")%>
;<%1: # DataBinder.Eval(Container.DataItem,"number")%><sup>3</sup>=<%1: # DataBinder.Eval(Container.DataItem, "cube")%>
</ItemTemplate>
<AlternatingItemTemplate>
<%1: # DataBinder.Eval(Container.DataItem,"number")%><sup>2</sup>=<%1: # DataBinder.Eval(Container.DataItem, "square")%>
;<%1: # DataBinder.Eval(Container.DataItem,"number")%><sup>3</sup>=<%1: # DataBinder.Eval(Container.DataItem, "cube")%>
</AlternatingItemTemplate>
<SeparatorTemplate>
<hr />
</SeparatorTemplate>
</asp:Repeater>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
自定义类 DataSource
该类中的 CreateEMPDataSource() 方法会在之后的例子使用。
public class DataSource
{
public static DataTable CreateDataSource()
{
DataTable dt = new DataTable("info");
dt.Columns.Add("number", typeof(int));
dt.Columns.Add("square", typeof(int));
dt.Columns.Add("cube", typeof(int));
for (int i = 1; i <= 50; i++)
{
DataRow dr = dt.NewRow();
dr[0] = i;
dr[1] = i * i;
dr[2] = i * i * i;
dt.Rows.Add(dr);
}
return dt;
}
public static DataTable CreateEMPDataSource()
{
DataSet ds = new DataSet();
ds.ReadXml(HttpRuntime.AppDomainAppPath + "\\" + "emp.xml");
return ds.Tables[0];
}
}
自定义 emp.xml 文件
该XML文件会在之后的例子中使用。
<?xml version="1.0" standalone="yes"?>
<EMPS>
<EMP>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>1980-12-17T00:00:00+08:00</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</EMP>
<EMP>
<EMPNO>7499</EMPNO>
<ENAME>ALLEN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-20T00:00:00+08:00</HIREDATE>
<SAL>1600</SAL>
<COMM>300</COMM>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7521</EMPNO>
<ENAME>WARD</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-22T00:00:00+08:00</HIREDATE>
<SAL>1250</SAL>
<COMM>500</COMM>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7566</EMPNO>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-04-02T00:00:00+08:00</HIREDATE>
<SAL>2975</SAL>
<DEPTNO>20</DEPTNO>
</EMP>
<EMP>
<EMPNO>7654</EMPNO>
<ENAME>MARTIN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-28T00:00:00+08:00</HIREDATE>
<SAL>1250</SAL>
<COMM>1400</COMM>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7698</EMPNO>
<ENAME>BLAKE</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-05-01T00:00:00+08:00</HIREDATE>
<SAL>2850</SAL>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-06-09T00:00:00+08:00</HIREDATE>
<SAL>2450</SAL>
<DEPTNO>10</DEPTNO>
</EMP>
<EMP>
<EMPNO>7788</EMPNO>
<ENAME>SCOTT</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1987-04-19T00:00:00+08:00</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</EMP>
<EMP>
<EMPNO>7839</EMPNO>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<HIREDATE>1981-11-17T00:00:00+08:00</HIREDATE>
<SAL>5000</SAL>
<DEPTNO>10</DEPTNO>
</EMP>
<EMP>
<EMPNO>7844</EMPNO>
<ENAME>TURNER</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-08T00:00:00+08:00</HIREDATE>
<SAL>1500</SAL>
<COMM>0</COMM>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7876</EMPNO>
<ENAME>ADAMS</ENAME>
<JOB>CLERK</JOB>
<MGR>7788</MGR>
<HIREDATE>1987-05-23T00:00:00+08:00</HIREDATE>
<SAL>1100</SAL>
<DEPTNO>20</DEPTNO>
</EMP>
<EMP>
<EMPNO>7900</EMPNO>
<ENAME>JAMES</ENAME>
<JOB>CLERK</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-12-03T00:00:00+08:00</HIREDATE>
<SAL>950</SAL>
<DEPTNO>30</DEPTNO>
</EMP>
<EMP>
<EMPNO>7902</EMPNO>
<ENAME>FORD</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1981-12-03T00:00:00+08:00</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</EMP>
<EMP>
<EMPNO>7934</EMPNO>
<ENAME>MILLER</ENAME>
<JOB>CLERK</JOB>
<MGR>7782</MGR>
<HIREDATE>1982-01-23T00:00:00+08:00</HIREDATE>
<SAL>1300</SAL>
<DEPTNO>10</DEPTNO>
</EMP>
</EMPS>
说明
1) Repeater 控件是用 PagedDataSource 绑定数据的。这点比较有意思,通过对 Repeater 控件的使用,你可以了解分页是如何现实的;
2) HeaderTemplate 为表头模板,ItemTemplate 为可重复的项,AlternatingItemTemplate 为可重复的交替项(改变隔行的页面风格),FooterTemplate 为注脚部部分,SeparatorTemplate 在各行之间呈现的元素,比如可以用分行符(<br> 标记)、水平线(<hr> 标记)等。注意 SeparatorTemplate 项不能是数据绑定的;
3) ItemTemplate 为数据源中的每一行都呈现一次的元素。若要显示 ItemTemplate 中的数据,要声明Web 服务器控件,并设置其数据绑定表达式以使其计算为 Repeater控件(即容器控件Container)的 DataSource 中的字段;
4) 在 Page_load 事件里,把数据绑定到 Repeater 控件。本例中创建一个有三列的表,并向表中添加记录,作为Repeater控件的数据源;
5) DataBinder 类提供对应用程序快速开发 (RAD) 设计器的支持以生成和分析数据绑定表达式语法;
6) DataBinder.Eval 方法有三个重载函数,在运行时使用反射来分析和计算对象的数据绑定表达式:
如:使用Eval方法绑定到 Price 字段。
(6) Container 是数据表在内存中的映射。