repeater和gridview,datalist等都有类似的事件,和类似的绑定办法,不过repeater的概念是没有row等字段属性的,先看如下代码:
Code
protected void rptMember_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
//rpt的元素是item,所以先判断每一行是否项模版或者是间隔模版
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
//这里用了linkbtn来出发事件
LinkButton linkBtnUserState = e.Item.FindControl("linkBtnUserState") as LinkButton;
//这里关键,需要用隐藏的label暂存Id
Label lbId = e.Item.FindControl("lbId") as Label;
//然后把ID放到commandArgument里面
linkBtnUserState.CommandArgument = lbId.Text;
}
}
protected void rptMember_ItemCommand(object source, RepeaterCommandEventArgs e)
{
//这里就可以调用commandArgument获得对应的ID
int id = int.Parse(e.CommandArgument.ToString());
UserInfo userMember = UserInfoManager.FetchEntityByKey(id);
if (userMember == null)
{
}
else
{
//这里用法和gridview类似,不过设置CommandName的地方不是view控件,而是Linkbtn里面设置,这里需区别一下
if (e.CommandName == "UpdateState")
{
if (userMember.UserState)
{
userMember.UserState = false;
}
else
{
userMember.UserState = true;
}
UserInfoManager.ModifyEntity(userMember);
BindRepeater(out pageCount);
}
}
}
总结:要用到控件后台来动态绑定数据,需要判断好控件自带的事件,还有是这些事件的时机,用好微软自身控件的功能和事件,其实也蛮强大的。当然,发展下去当然要自定义自己需求的东西。在asp.net 3.5的控件时代,努力吃透工具栏不同控件的内涵吧
Code
<td width="10%" align="center">
<asp:LinkButton ID="linkBtnUserState" runat="server" CommandName="UpdateState"><%#UserState(Convert.ToInt32(Eval("UserState"))) %>
</asp:LinkButton>
</td>
//注意这里commandName是设置在按钮控件里面