【问题标题】:Checkbox in Datagrid header ClientID (JQuery)Datagrid 标头 ClientID (JQuery) 中的复选框
【发布时间】:2010-10-17 02:33:47
【问题描述】:

在母版页中,我有一个标准的 DataGrid:

  <asp:DataGrid ID="dgMyGrid" runat="server" AutoGenerateColumns="false">
            <Columns>
            <asp:TemplateColumn>
            <HeaderTemplate>
            <asp:CheckBox CssClass="Checker" ID="cbSelectAll" runat="server" />
            </HeaderTemplate>
            <ItemTemplate>
            <asp:CheckBox ID="cbSelect" runat="server" />
            </ItemTemplate>
            </asp:TemplateColumn>
            </Columns>
  </asp:DataGrid>

使用以下 jQuery 使标题复选框全选:

$(document).ready(function() {
$("#ctl00_ContentPlaceHolder1_dgMyGrid_ctl01_cbSelectAll").click(function() {
 $("#<%=dgID %> :checkbox").each(function(i)
 {
 this.checked = $("#ctl00_ContentPlaceHolder1_dgMyGrid_ctl01_cbSelectAll").is(":checked")
 });
 });
});

这可行,但有点难看 - 我无法使用
获取标题复选框的客户端 ID (就像我对数据网格所做的那样)可能是因为 javascript 是在该控件之前呈现的。有没有更优雅的方法可以让我的复选框的 clientID 从数据网格中取出?我认为如果我没有像这样对 clientID 进行硬编码会更好。

抱歉,如果这个问题的答案很明显,这是我尝试 jQuery 的第一天! :)

【问题讨论】:

    标签: .net jquery datagrid


    【解决方案1】:

    此代码用于查找您的复选框

     protected static Control FindControl(Control control, string controlId)
        {
            Control result;
            foreach (Control ctrl in control.Controls)
            {
                if (ctrl.ID == controlId)
                {
                    result = ctrl;
                    return result;
                }
                if (ctrl.Controls.Count != 0)
                {
                    result = FindControl(ctrl, controlId);
                    if (result != null)
                    {
                        return result;
                    }
                }
            }
            return null;
        }
    

    现在您可以在 aspx 页面上使用:

    <%= FindControl(dgMyGrid, "cbSelectAll").ClientID%>
    

    【讨论】:

    • 感谢您,这是我最终使用的解决方案。也就是说,我很想在 jQuery Alone 中看到解决方案,但如果没有进一步的回应,我会将此标记为答案。
    【解决方案2】:

    为什么不只引用复选框“cbSelectAll”的类。

    <asp:CheckBox CssClass="Checker" ID="cbSelectAll" runat="server" />
    
    
    $("#<%=dgID %> :checkbox").each(function(i)
    { 
        this.checked = $(".Checker").is(":checked");
    });
    

    如果“Checker”类用于多个控件,您始终可以分配一个唯一的类。

    <asp:CheckBox CssClass="Checker cbSelectAll" ID="cbSelectAll" runat="server" />
    
    $("#<%=dgID %> :checkbox").each(function(i)
    { 
        this.checked = $(".cbSelectAll").is(":checked");
    });
    

    【讨论】:

    • 不幸的是,这似乎不起作用 - 全选复选框由于某种原因永远不会被选中。虽然如果我选中其他复选框,然后单击 checkall,它们都被取消选中,相反的不起作用(测试 IE8 和 FF)。
    • 也许这是因为它在数据网格内...因为我认为这是标准的 jQuery 功能。
    猜你喜欢
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 2018-06-24
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多