2013-03-07 107 views
-1

我有一个包含复选框的行的gridview。在gridview下面我有一个按钮。当我点击它时,我想从客户端选择所有的复选框。到目前为止,我已阅读关于OnClientClick,JavaScript等等,但我的代码不起作用。有人可以帮我吗?从按钮客户端选择gridview中的所有复选框

注:我不想选择复选框在头选择复选框(我发现了很多关于这方面的例子),但点击在GridView

<asp:GridView runat="server" ID="MyGridView" EnableViewState="true" 
    AutoGenerateColumns="False" 
    ><AlternatingRowStyle BackColor="White" /> 

    <Columns> 

    <asp:TemplateField HeaderText="Select" SortExpression="Select" ItemStyle-HorizontalAlign="Center" > 
       <EditItemTemplate> 
        <asp:CheckBox ID="CkBoxSelectET" runat="server" /></EditItemTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="CkBoxSelectIT" runat="server" /></ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Name" SortExpression="Name" ItemStyle-HorizontalAlign="Center" Visible="false" > 
       <ItemTemplate> 
        <asp:Label ID="name" runat="server" Text='<%# Bind("Name") %>' Visible="false" /></ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="City" SortExpression="City" ItemStyle-HorizontalAlign="Left" > 
       <ItemTemplate> 
        <asp:Label ID="lblCity" runat="server" /></ItemTemplate> 
     </asp:TemplateField> 

    </Columns> 
    </asp:GridView> 

<asp:Button runat="server" ID="btnSelect" Text="Select all" BackColor="LightGray" OnClientClick="SelectAll(id);" /> 

<script type="text/javascript"> 

var gridViewControl = document.getElementById('<%= MyGridView.ClientID %>'); 

function SelectAll(id) { 
    for (i = 0; i < gridViewControl.elements.length; i++) { 
     if (gridViewControl.elements[i].type == "checkbox") { 
      gridViewControl.elements[i].checked = document.getElementById(id).checked; 
     } 
    } 
} 

外的按钮C#,当我绑定数据:

btnSelect.Attributes.Add("OnClientClick", "javascript:SelectAll('" + btnSelect.ClientID + "')"); 

回答

0

最后我找到了解决方案,它的工作原理。我稍微修改@Ann L的溶液

function SelectAll() { 

    var frm = document.forms['aspnetForm']; 

    for (var i = 0; i < document.forms[0].length; i++) { 
     if (document.forms[0].elements[i].id.indexOf('CkBoxSelectIT') != -1) { 

       document.forms[0].elements[i].checked = true 

     } 
    } 
} 
1

你似乎在说:“如果我的按钮是‘检查’(即与对应于你传递的ID的元素),然后检查这个checkbo X”。由于无法检查按钮,这是行不通的。

你也在说:“点击这个按钮,调用这个Javascript并传入变量id的值。”但是id在该上下文中没有定义。

如果你想要的是选择所有的复选框,并且不希望所有的切换/无检查,该代码应工作:

HTML:

<button id="btnSelect" type="button" onclick="SelectAll" >Select All</button> 

在javascript中:

var gridViewControl = document.getElementById('<%= MyGridView.ClientID %>'); 

function SelectAll() { 
    for (i = 0; i < gridViewControl.elements.length; i++) { 
     if (gridViewControl.elements[i].type == "checkbox") { 
      gridViewControl.elements[i].checked = true; 
     } 
    } 

}

你不应该需要C#代码在所有。

+0

修改为你建议我,但它仍然无法正常工作.. – Camilla 2013-03-07 14:54:16

+0

我认为实际的JavaScript是更多的想法/例,比实际的工作代码。变量“gridViewControl”尚未设置。您需要确保在“gridViewControl”变量中选择正确的DOM元素,然后循环其中的复选框。 jQuery的完美工作。 – Floremin 2013-03-07 15:13:13

+0

@Camilla你有错误,或者什么也没有发生? – 2013-03-07 15:42:15

1

我建议使用jQuery完成客户端。我假设新的ASP.NET将按照您命名的方式呈现元素的ID,因此我将使用这些元素。 (我认为这是在ASP.NET呈现的ID这样的设置)

这里是一些示例代码,你可以把你的HTML代码的底部,包括jQuery的经过:

<script> 
    $("#btnSelect").click(function(event) { 
     event.preventDefault(); 
     $("#MyGridView").find("[type='checkbox']").prop('checked', true); 
    }); 
</script> 

这将假设GridView容器元素的呈现标识为“MyGridView”,则只选中并检查GridView中的复选框。

+0

我应该在标签btnSelect中写些什么?例如onClientClick – Camilla 2013-03-07 15:26:24

+0

你不需要任何东西。这基本上做同样的事情,没有涉及ASP.NET,它是非常标准的jQuery的事情。否则,您需要定义一个javascript函数并将其名称放在“onClientClick”中。例如: – Floremin 2013-03-07 15:29:40

+0

刚试过jQuery,它仍然不起作用 – Camilla 2013-03-07 15:35:55