Флажок в заголовке Datagrid ClientID (JQuery) - PullRequest
0 голосов
/ 02 апреля 2009

На главной странице у меня есть стандартная 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")
 });
 });
});

это работает, но немного уродливо - я не могу получить идентификатор клиента для флажка заголовка с
<% = cbSelectAll.ClientID%> (как я сделал для сетки данных) Возможно, потому что javascript отображается перед этим элементом управления. Есть ли для меня более элегантный способ получить clientID моего флажка из сетки данных? Я думаю, что было бы лучше, если бы я не указывал код клиента таким образом.

Извиняюсь, если ответ на этот вопрос очевиден, это мой первый день, когда я пробую jQuery! :)

Ответы [ 2 ]

1 голос
/ 02 апреля 2009

Этот код, чтобы найти свой флажок

 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%>
1 голос
/ 02 апреля 2009

Почему бы просто не ссылаться на класс флажка '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");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...