Repeater控件使用
1. Repeater 控件的使用
创建数据源,并为Repeater控件设置数据源,然后就可以在<ItemTemplate> 中设置要显示的值。数据源中有多少条数据,都会遍历出来,相当于foreach,如果需要隔行的文字显示不同的样式。就要设置<AlternatingItemTemplate>,在此属性的内容就是偶数行的内容啦,如果需要隔行显示不同样式,则偶数行的数据设置不同的样式即可。可以将偶数行的代码通过div包装一下在放到<AlternatingItem Template>中,就可以通过设置div的样式使得偶数行的数据样式不同啦。 简而言之,<AlternatingItem Template>模版用来显示偶数行的数据。
<HeaderTemplate> 腾飞公司<br /> </HeaderTemplate>表头显示的内容
<FooterTemplate>CEO:小小鸟</FooterTemplate> 表尾显示的内容
<SeparatorTemplate><hr /></SeparatorTemplate>数据行之间显示的内容。
可以通过设置Repeater控件的HeaderTemplate,FooterTemplate分别为Table的头和尾的方法,把数据以表格的形式渲染到客户端。
在绑定了数据源之后的Repeater控件中,可以使用”<%#Eval(“字段名”)%>”取得数据源中的某个字段的值:
<asp:Label ID="Label1" runat="server" Text='<%#Eval("UserNo") %>'></asp:Label>
姓名:<%#Eval("UserName") %>
性别:<%#Eval("Sex") %>
年龄:<%#Eval("Age") %>
注意:用服务器端的控件时候,要注意,在给控件的属性绑定数据的时候,不能加其他的字符串,不然就起不到绑定的效果了。
例如:
<asp:Label ID="Label1" Text='员工ID:<%#Eval("UserNo") %>' runat="server"></asp:Label>
这里的Text属性不能加“员工ID”这些字符。
正确写法:
<asp:Label ID="Label1" Text=' <%#Eval("UserNo") %>' runat="server"></asp:Label>
但是我们可以通过C#代码来处理他:
Text='<%#Eval("UserNo").ToString().Insert(0,"员工ID:")%>'
ItemDataBound事件 绑定每行数据时候都会触发此事件。
对于每行数据显示的时候都会调用ItemDataBound事件,在这个事件中可以对当前行进行处理,时间对象主要成员:
1.e.Item.ItemType为当前行的类型,Item为ItemTemplate行、AlternatingItem为AlternatingitemTemplate行、还有header、Footer等取值。
2.itemIndex当前行的序号。
3.DataItem当前行绑定的对象。
如果要在ItemDataBound事件中对ItemTemplate模版中的控件作处理,则必须使用ruant=Server的asp。Net控件或者Html控件,为控件设置id,然后同FindControl方法根据id来取得控件。注意在模版中不能通过控件的id来操作控件。必须用FindControl找到控件才能使用。
代码如下:protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
DataRowView rowview=(DataRowView)e.Item.DataItem ; //是一个DataRowView对象。
var PersonRow = (ASP.NET高级_学习.ObjDataSrc.DAL.DataSet1.UserDataRow)rowview.Row;//绑定的是数据库中的一行。
if (PersonRow.UserName == "bitch")
{
Label l1=(Label)e.Item.FindControl("Label1");//通过FindControl方法操作模版中的服务器控件
l1.Text = "This is not a good name";
l1.ForeColor = Color.Red;
}
}
ItemCommand事件 点击按钮时会触发此事件。
可以在模版中放置button控件(LinkButton、ImageButton),模版中的按钮一般不写onclick事件响应,而是响应Repeater的ItemCommand事件。
为button控件设置CommandName,CommandArgument属性,然后在itemCommand事件中读取e的CommandName、CommandArgument属性就可以获得事件的命令和行参数了。如果对数据进行了操作,则需要Repeater1.DataBind()来重新绑定,刷新数据,从数据中刷新最新的数据。
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "IncAge") //为一类按钮添加相同的处理响应函数。
{
int userno = Convert.ToInt32(e.CommandArgument); //取得命令的参数,就是数据行的id
UserDataTableAdapter user = new UserDataTableAdapter();
user.IncAgeByUserNo(userno); //对该行数据进行某些操作。
Repeater1.DataBind(); //由于刷新数据
}
}