日期:2014-05-18  浏览次数:20374 次

Repeater控件的几点应用望指教
1:Repeater有个OnItemCommand事件,但是需要在Repeater里面的table或li标签里面放置一个服务器端按钮控件才可以触发,如果我直接点击行就触发这个事件?

2:Repeater有个OnItemDataBound事件,我想通过这个方法来实现展示的数据有光棒效果,但是实现出来后发现必须设置一<Tr>标签一个ID才可以是否还有其他方法
C# code

//这个是我实现的光棒效果
protected void rep_data_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        //row是前台<TR>标签的ID号
        HtmlTableRow row = (HtmlTableRow)e.Item.FindControl("row");
          
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            CommFun.RowOnMouse(row);//光棒效果  
         }
    }



------解决方案--------------------
原理是通过给tr一个点击事件,然后用js 的方法去回调服务器端的事件,但是由于Repeater里面生成的按钮id会不一样为了方便获取我采用了一个GetClientID(Container)方法吧服务器端控件的ID号保存到tr的name属性然后获取通过这个id就可以判断是哪个行的按钮提交的事件,然后后面的工作就和以前使用,Repeater的OnItemCommand事件一样了,望其他高手看有没有优化的更好的方法
C# code

web页面Repeater的部分代码
<ItemTemplate>
 <tr  runat="server" onclick="do_show(this)"  name='<%# GetClientID(Container)%>'>
  <td style="display:none;"> 
   <asp:Button ID="btn_1" runat="server"  CommandArgument='<%# Eval("Tb_Name")%>' />
  </td>
 </tr>
</ItemTemplate>

 //点击行调用后台事件rep_data_ItemCommand
 function do_show(obj) {
  document.getElementById(obj.name).click(); 
 }

后台页面
 /// 获取服务器端的ID
 protected string GetClientID(Control ctrl)
 {
  string btnClientID = ctrl.FindControl("btn_1").UniqueID;
  return btnClientID;
 }