2009-04-02 15 views
0

でチェックボックス:私は、標準のDataGridを持っているマスターページ内データグリッドヘッダの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> 

は、ヘッダのチェックボックスがすべてを選択させること、次の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を
<%= cbSelectAll.ClientID%>(私はデータグリッドのために行ったように)取得できません。おそらく、そのコントロールの前にjavascriptがレンダリングされているからです。私のチェックボックスのclientIDをDataGridから取得するためのよりエレガントな方法はありますか?私はこのようにclientIDをハードコードしなかった方が良いだろうと思う。

これに対する答えが明らかな場合は、謝罪してください、私の最初の日はjQueryです! :)

答えて

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%> 
+0

ありがとう、これは私が使い終わった解決策です。つまり、jQuery Aloneでこれを解決することが大好きですが、それ以上の応答がない場合はこれを答えとしてマークします。 – RYFN

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"); 
}); 
+0

を残念ながら、このdoesntのは動作するようです - すべてのチェックボックスが取得することはありません選択になり何らかの理由でチェックされています。私が他のチェックボックスをチェックしてチェック・ボタンをクリックすると、それらはすべて選択解除になりますが、反対のものは機能しません(テスト済みIE8とFF)。 – RYFN

+0

おそらく、これはDataGridの内部にあるからです...これは標準のjQuery機能だと思います。 – RYFN

関連する問題