2010-05-18 2 views
1

У меня есть checkBoxes в моих столбцах храма Gridview, называемых «Категория A» и «Категория B». Мне нужна функция «Выбрать все», то есть когда пользователь проверяет флажок «Выбрать все» в столбце категории «А», все флажки должны быть отмечены под этим столбцом. То же самое для категории B. Я пытаюсь с кодом ниже. Проблема с моим кодом заключается в том, что он выбирает все флажки во всем gridview, «Категория A», а также флажки «Категория B». Но я хочу, чтобы в одном столбце были отмечены только флажки.Выбрать все флажки в GridView ASP.NET с помощью JQuery

function SelectAllCheckboxesA(chk) { 
       $('#<%=gvSurveys.ClientID %>').find("input:checkbox").each(function() { 
        if (this != chk) { 
         if ($(this).hasClass('CatA') != false) { 
          this.checked = chk.checked; 
         } 
        } 
        else { 
         alert($(this)); 
        } 
       }); 
      } 




<asp:GridView ID="gvSurveys" runat="server" AutoGenerateColumns="false" AllowSorting="True" Width="1500px"> 
          <Columns> 
           <asp:TemplateField> 
           <HeaderTemplate>Category A 
    <asp:CheckBox ID="chkSelectAllCatA" runat="server" Visible="false" onclick="javascript:SelectAllCheckboxesA(this);" CssClass="SACatA" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <asp:CheckBox ID="chkCatA" runat="server" Enabled="false" CssClass="CatA" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
    <HeaderTemplate> 
    Category B 
    <asp:CheckBox ID="chkSelectAllCatB" runat="server" Visible="false" CssClass="CatB" onclick="javascript:SelectAllCheckboxesB(this);" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <asp:CheckBox ID="chkCatB" runat="server" Enabled="false" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
    </asp:GridView> 
+0

Для любви к щенкам правильно отформатируйте свой код (и примите некоторые ответы). – R0MANARMY

+0

@ROMAN - только 4 подходящих вопроса и 16 пунктов повторения. Возможно, вы захотите немного порезать его и просто указать, как работает система. – tvanfosson

+0

@tvanfosson: и зарегистрированный пользователь в течение 3 месяцев. Часто задаваемые вопросы есть по какой-то причине. – R0MANARMY

ответ

1

Почему вы не выбрать только Флажки из Категорияа:

$('#<%=gvSurveys.ClientID %>').find("input:checkbox[Id*=chkCatA]") 

будет работать?

+0

Так как он добавляет класс «CatA» к флажкам, селектор классов тоже будет работать (и выглядит проще). – R0MANARMY

+0

Нет, это не помогло. Я попытался конкретно указать «input: checkbox [Id * = chkCatA]». – dexter

0

Измените флажки selectAll на один класс. Затем извлеките класс из флажка и используйте его как часть селектора, отфильтровывая выбор. Это значительно упростит ситуацию, поскольку вы знаете, что для всех согласованных входов просто нужно получить проверенное значение из параметра.

function SelectAllCheckboxesA(chk) { 
    var $chk = $(chk); 
    var myClass = $chk.attr('class'); 
    $('#<%=gvSurveys.ClientID %>') 
     .find("input." + myClass + ":checkbox") 
     .not($chk) 
     .attr('checked', $chk.attr('checked')); 
} 
+0

Привет благодарю вас за ответ. Это имеет тот же эффект, все флажки выбираются во всем Gridview. – dexter

+0

@dexter - Тогда у вас что-то не так в коде. Если флажки в заголовке имеют разные классы (друг от друга), и эти классы соответствуют тем, которые указаны в столбце, это должно работать. Селектор специфичен для класса и не будет выбирать какие-либо флажки, которые не имеют этого класса. – tvanfosson

0
$('#<%=gvSurveys.ClientID %>').find('input[Id*="chkCatA"]:checkbox').each(function() { 
      if (this != chk) { 
       this.checked = chk.checked; 
      } 
     }); 
9

Это основан на решении предложенного Ashish Patil с некоторыми изменениями, чтобы очистить флажок в строке заголовка, когда какое-либо из флажков в строках сетки снято.

В GridView создать столбец шаблона:

<asp:templatefield> 
<headertemplate> 
    <asp:CheckBox ID="chkSelectAll" cssclass="chkHeader" runat="server" /> 
</headertemplate> 
<itemtemplate> 
    <asp:CheckBox ID="chkSelect" cssclass="chkItem" runat="server"/> 
</itemtemplate> 
</asp:templatefield> 

JQuery скрипт, поместите его в $ (документ) .ready, например:

var headerChk = $(".chkHeader input"); 
var itemChk = $(".chkItem input"); 

headerChk.click(function() { 
itemChk.each(function() { 
    this.checked = headerChk[0].checked; }) 
}); 

itemChk.each(function() { 
    $(this).click(function() { 
    if (this.checked == false) { headerChk[0].checked = false; } 
    }) 
}); 
+0

потрясающий .. это отлично работает для меня .. –

0

Создать строку с флажком в заголовке:

<asp:TemplateField HeaderText="Merged Client"> 
       <HeaderTemplate> 
        <asp:CheckBox ID="chkboxSelectAll" runat="server" AutoPostBack="true" OnCheckedChanged="chkboxSelectAll_CheckedChanged" ></asp:CheckBox> Merged Client 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="CheckMergedClient" **runat="server"** **onclick="CheckChanged()" OnCheckedChanged="CheckMergedClient_CheckedChanged"** **AutoPostBack="true"** value='<%# Eval("ClientId") %>'/>         </ItemTemplate> 
</asp:TemplateField> 

в коде позади добавить OnCheckChanged обработчик события, чтобы выбрать или отменить выбор всех:

protected void chkboxSelectAll_CheckedChanged(object sender, EventArgs e) 
    { 
     CheckBox ChkBoxHeader = (CheckBox)ClientMatchGridView.HeaderRow.FindControl("chkboxSelectAll"); 
     foreach (GridViewRow row in ClientMatchGridView.Rows) 
     { 
      CheckBox ChkBoxRows = (CheckBox)row.FindControl("CheckMergedClient"); 
      if (ChkBoxHeader.Checked == true) 
      { 
       ChkBoxRows.Checked = true; 
      } 
      else 
      { 
       ChkBoxRows.Checked = false; 
      } 
     } 
    } 
Смежные вопросы