Datagrid标题中的复选框ClientID(JQuery)

时间:2009-04-02 12:22:53

标签: .net jquery datagrid

在主页中我有一个标准的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 &LT;%= cbSelectAll.ClientID%GT; (正如我为datagrid所做的那样)可能是因为javascript是在该控件之前呈现的。有没有更优雅的方式让我从数据网格中获取我的复选框的clientID?我认为如果我没有像这样对clientID进行硬编码会更好。

道歉,如果对此的答案是显而易见的,那是我尝试jQuery的第一天! :)

2 个答案:

答案 0 :(得分:1)

为什么不引用复选框'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");
});

答案 1 :(得分: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%>