2009-04-02 3 views
0

Innerhalb einer Masterpage Ich habe eine Standard-Datagrid:Checkbox in Datagrid-Header ClientID (JQuery)

<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> 

die folgenden jQuery haben, dass das Header-Kontrollkästchen alle macht:

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

dies funktioniert, aber es ist ein bisschen hässlich - ich kann nicht die Client-ID für das Header-Kontrollkästchen mit
<% = cbSelectAll.ClientID%> (wie ich für das Datagrid getan habe) Möglicherweise weil das Javascript vor diesem Steuerelement gerendert wird. Gibt es eine elegantere Möglichkeit für mich, die ClientID meines Kontrollkästchens aus dem Datagrid zu bekommen? Ich denke, es wäre besser, wenn ich die ClientID nicht so fest codiere.

Entschuldigung, wenn die Antwort auf dieses offensichtlich ist, ist es mein erster Tag, der jQuery versucht! :)

Antwort

1

Dieser Code Ihre Kontrollkästchen

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; 
    } 

Und jetzt finden Sie auf aspx Seite verwenden:

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

Danke dafür, es ist die Lösung, die ich verwendet habe. Das heißt, ich würde gerne eine Lösung dafür in jQuery Allone sehen, aber ich werde dies als die Antwort markieren, wenn es keine weiteren Antworten gibt. – RYFN

1

Warum nicht nur die Klasse der Checkbox 'cbSelectAll' referenzieren.

Wenn die Klasse 'Checker' für mehrere Steuerelemente verwendet wird, können Sie immer eine eindeutige Klasse zuweisen.

<asp:CheckBox CssClass="Checker cbSelectAll" ID="cbSelectAll" runat="server" /> 

$("#<%=dgID %> :checkbox").each(function(i) 
{ 
    this.checked = $(".cbSelectAll").is(":checked"); 
}); 
+0

leider scheint nicht zu funktionieren - das Kontrollkästchen Alle auswählen wird nie bekommt aus irgendeinem Grund überprüft. Obwohl, wenn ich die anderen Checkboxen überprüfe und auf den Checkall klicke, werden sie alle abgewählt, das Gegenteil funktioniert nicht (getestet IE8 und FF). – RYFN

+0

Vielleicht liegt das daran, dass es sich im DataGrid befindet ... da dies die Standard-jQuery-Funktionalität ist, denke ich. – RYFN