gridview里边搞定了,就是在某一行数据上点一下鼠标,全行都选中了。通过RowDataBound里边的e.Row.Attributes.Add("onclick"....实现的。那么,repeater里边应该怎么实现呢?e.Item好像没有attributes这个功能啊。

解决方案 »

  1.   

    在tr上添加单击的JS事件
    参考:http://hi.baidu.com/handboy/blog/item/a02220ef890538e7cf1b3e64.html
      

  2.   

    http://www.cnblogs.com/oec2003/archive/2008/10/23/1318259.html应该符合你的要求
      

  3.   

    在Item模板中先放一个Panel,然后再把其它控件放到Panel里。然后你可以从Item中FindControl找到这个Panel,并且通过Attributes.Add("onclick".... 来设置。
      

  4.   

    另外,应该考虑你使用Repeater是不是太简单了,使用复杂一点的控件也许开发效率高很多。
      

  5.   

    for (int i=0;i<this.Repeater1.Items.Count;i++)
    {
        HtmlInputCheckBox check = (HtmlInputCheckBox)this.Repeater1.Items[i].FindControl("chkSelect");
        if( check != null )
        {
            check.Checked = true;
        }
    }或
    function  CheckAll(e,itemname){
        var aa=document.getElementsByName(itemname);
        if(aa==undefined) return;
        for (var i=0; i<aa.length; i++)aa[i].checked = e.checked;
    }
     在HeaderTemplate中或者在Repeater之外直接添加全选的一个CheckBox: <input name="chkall" value="1" type="checkbox" onclick="CheckAll(this,'Item')"/>
      

  6.   


    不完全同意 复杂点的控件在使用上方便 但灵活性相对差 
    最关键的是 最终生成的html 不干净
    所以我只使用repeater 和listview 
      

  7.   

    如果你使用jquery就可以很方便的实现此功能。不用postback了。 $('.trclass input').selected = true;
      

  8.   

     <script language="javascript">
        function select_deselectAll(chkVal, idVal) { 
        var frm = document.forms[0];    // Loop through all elements
        for (i=0; i<frm.length; i++) {    // Look for our Header Template's Checkbox
        if (idVal.indexOf ('CheckAll') != -1) {    // Check if main checkbox is checked, then select or deselect datagrid checkboxes 
         if(chkVal == true) 
         {
             frm.elements[i].checked = true;
         } 
         else 
         {
             frm.elements[i].checked = false;
         }
         if(frm.elements[i].name.indexOf('CancelAll')!=-1)
         {
              frm.elements[i].checked = false;
         }
       } 
     }
    }
        </script>
    模板列:
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <asp:CheckBox ID="CheckThis" runat="server" />
                                        </ItemTemplate>
                                        <ItemStyle Width="50px" HorizontalAlign="Center" />
                                        <HeaderTemplate>
                                            <asp:CheckBox ID="CheckAll" OnClick="javascript: return select_deselectAll (this.checked, this.id);"
                                                runat="server" />
                                        </HeaderTemplate>
                                        <HeaderStyle Width="50px" CssClass="gr1" HorizontalAlign="Center" />
                                    </asp:TemplateField>
      

  9.   

    谢谢大家的回答,问题基本可以解决了,针对大家前边的回答,我回复几句:一:可能原来没说明白,我不想用checkbox,而是希望鼠标在数据行任意位置点下,都可以做到选择全行。二:那两位高手说的我都很赞成,复杂控件带来开发高效率,简单控件带来灵活性。现在我主要在学习阶段,想好好打打底子,所以想先从简单控件入手(gridview和repeater哪个简单?鬼知道)。我想把repeater搞得通通透透的,再去弄复杂控件,不知道这个学习思路对不对。三:看上去,给tr或者panel加属性的办法比较符合我的要求,因为在学习div+css,所以我准备采用那个panel的办法。呵呵,他俩各加一半分,大家没意见吧?
      

  10.   

    在tr上添加单击的JS事件 
    参考:http://hi.baidu.com/handboy/blog/item/a02220ef890538e7cf1b3e64.html