2013-06-25 3 views
2

У меня есть флажок «Выбрать все». Когда я нажимаю это, тогда все остальные флажки внутри моего Gridview проверяются. Но я хочу, чтобы, когда кто-либо из флажка внутри сетки будет снят, этот флажок «Выбрать все» будет автоматически снят. Есть ли кто-нибудь, кто может помочь мне в этом, пожалуйста?Как снять флажок «Выбрать все», если один флажок снят с отметки

спасибо.

ответ

1

Вы можете сделать это на стороне клиента или на стороне сервера

стороне клиента с помощью JavaScript/JQuery

В флажками добавляются динамически вам нужно будет использовать метод on для привязки флажков функции и стрелять, когда их состояние меняется.

$(document).ready(function() { 
    $(".checkbox").on("change", function() { 
     if(!$(this).is(":checked")){ 
      $(".selectAll").prop('checked', false); 
     } 
    }); 
}); 

Вот jsFiddle с полным функционированием выбрать все, что будет:

  • Выбрать все/Отменить все
  • убрать галочку Select All, когда один из флажков является неотмеченным
  • Tick выбрать все когда отмечены все галочки

Сфера сервера

использовать обработчик события на обратную передаче (АЯКС), когда флажок неотмеченный и петля через все флажки и снимите выделение их

Шрифт конца использует Ajax, чтобы сделать частичную обратную передачу, чтобы обновить GridView. флажки «Выбрать все» и квадратные сетки вызовут обратную передачу.

<asp:UpdatePanel runat="server"> 
    <ContentTemplate> 
     <asp:GridView ID="gvCheckBoxes" runat="server"> 
      <Columns> 
       <asp:TemplateField > 
        <ItemTemplate> 
         <asp:CheckBox ID="cbCheckBox" OnCheckedChanged="CheckBoxChanged" AutoPostBack="true" runat="server" /> 
        </ItemTemplate> 
        /asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="cbSelectAll"/> 
    </Triggers> 
</asp:UpdatePanel> 

Код За

Выбор: обработчик события Все флажок петли через GridView и находит галочки. Он галочит их, если отмечен флажок «Выбрать все», иначе он не удаляет их

Обработчик события checkbox через сетку пересекает флажки и устанавливает флаг, чтобы определить, следует ли отмечать или отключать флажок «Выбрать все». Она существует цикл, если любой из флажков не тикали, как выбрать все должны поэтому быть неотмеченным а

public void SelectAll (Object sender, Eventargs e) 
{ 
    foreach (var row in grid.Rows) 
    { 
     var checkBox = (CheckBox)row.FindControl("cbCheckBox"); 
     checkBox.Checked = cbSelectAll.Checked;   
    } 
} 

public void CheckBoxChanged(Object sender, Eventargs e) 
{ 
    var isSelectAll = true; 

    foreach (var row in grid.Rows) 
    { 
     var checkBox = (CheckBox)row.FindControl("cbCheckBox"); 

     if(!checkBox.Checked) 
     { 
      isSelectAll = false; 
      break; 
     } 
    } 

    cbSelectAll.Checked = isSelectAll;   
} 
0

Лучший способ, которым я могу думать о том, чтобы преобразовать GridView-х CheckBoxField к TemplateField. Затем подключите новый asp:CheckBox в TemplateField к событию CheckedChanged. В коде кода вы обрабатываете событие CheckedChanged, а затем, когда какой-либо из этих флажков изменяется на unchecked, вы можете переключить флажок «проверить все».

2
function SelectheaderCheckboxes(headerchk) { 
debugger 
var gvcheck = document.getElementById('gvdetails'); 
var i; 
//Condition to check header checkbox selected or not if that is true checked all checkboxes 
if (headerchk.checked) { 
for (i = 0; i < gvcheck.rows.length; i++) { 
var inputs = gvcheck.rows[i].getElementsByTagName('input'); 
inputs[0].checked = true; 
} 
} 
//if condition fails uncheck all checkboxes in gridview 
else { 
for (i = 0; i < gvcheck.rows.length; i++) { 
var inputs = gvcheck.rows[i].getElementsByTagName('input'); 
inputs[0].checked = false; 
} 
} 
} 

<asp:GridView ID="gvdetails" runat="server" DataSourceID="dsdetails" onrowdatabound="gvdetails_RowDataBound" > 
<Columns> 
<asp:TemplateField> 
<HeaderTemplate> 
<asp:CheckBox ID="chkheader" runat="server" onclick="javascript:SelectheaderCheckboxes(this)" /> 
</HeaderTemplate> 
<ItemTemplate> 
<asp:CheckBox ID="chkchild" runat="server"/> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 
0

Посмотрите на этот код. надеюсь, что это поможет вам

<div> 
<asp:CheckBox ID="chkSelectAll" runat="server" /> 
    <asp:GridView ID="GridView1" runat="server"> 
     <Columns> 
      <asp:TemplateField HeaderText="Select"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkSelect" runat="server" oncheckedchanged="chkSelect_CheckedChanged" AutoPostBack="true" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
</div> 

protected void chkSelect_CheckedChanged(object sender, EventArgs e) 
    { 
     bool isFound = false; 
      foreach (GridViewRow gvr in GridView1.Rows) 
      { 
       CheckBox chkSelect = gvr.FindControl("chkSelect") as CheckBox; 
       if (chkSelect.Checked == false) 
       { 
        isFound = true; 
        break; 
       } 

      } 

      if (isFound) 
      { 
       chkSelectAll.Checked = false; 
      } 
      else 
      { 
       chkSelectAll.Checked = true; 

      } 
    } 
+1

Может быть, вы можете объяснить, что вы сделали и почему? Кроме того, при отправке кода на двух разных языках я бы рекомендовал включить блок текста между ними (если ничего не делать), указывая на переключатель. Это также дает вам возможность (при необходимости) дать подсказку синтаксическому маркеру для переключения правил. –

0

Следующий код должен работать. Я протестировал его.

Javascript:

<script type="text/javascript"> 
     function OnOneCheckboxSelected(chkB) { 
      var IsChecked = chkB.checked; 
      var Parent = document.getElementById('gridFileList'); 
      var cbxAll; 
      var items = Parent.getElementsByTagName('input'); 
      var bAllChecked = true; 
      for (i = 0; i < items.length; i++) { 
       if(items[i].id.indexOf('cbxSelectAll') != -1){ 
        cbxAll = items[i]; 
        continue; 
       } 
       if (items[i].type == "checkbox" && items[i].checked == false) { 
        bAllChecked = false; 
        break; 
       } 
      } 
      cbxAll.checked = bAllChecked; 
     } 

     function SelectAllCheckboxes(spanChk) { 
      var IsChecked = spanChk.checked; 
      var cbxAll = spanChk; 
      var Parent = document.getElementById('gridFileList'); 
      var items = Parent.getElementsByTagName('input'); 
      for (i = 0; i < items.length; i++) { 
       if (items[i].id != cbxAll.id && items[i].type == "checkbox") { 
        items[i].checked = IsChecked; 
       } 
      } 
     } 
    </script> 

ASPX Markup:

<asp:TemplateField HeaderText="Select"> 
    <HeaderTemplate> 
     <asp:CheckBox ID="cbxSelectAll" OnClick="javascript:SelectAllCheckboxes(this);" runat="server" /> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <asp:CheckBox OnClick="javascript:OnOneCheckboxSelected(this);" ID="cbxSelect" runat="server" /> 
    </ItemTemplate> 
</asp:TemplateField> 
-1

Над кодом я modifiyed его, если пользователь бесконтрольно дочерних строк сетки. заголовок сетки автоматически отключается.

<script type="text/javascript"> 
    function UncheckHeader(headerchk) { 
     var gvcheck = document.getElementById('gvdetails'); 
      var inputs = gvcheck.rows[0].getElementsByTagName('input'); 
      inputs[0].checked = false; 
    } 
    function SelectAll(headerchk) { 
     var gvcheck = document.getElementById('gvdetails'); 
     var i; 
     // if true checked all checkboxes 
     if (headerchk.checked) { 
      for (i = 0; i < gvcheck.rows.length; i++) { 
       var inputs = gvcheck.rows[i].getElementsByTagName('input'); 
       inputs[0].checked = true; 
      } 
     } 
      //if condition fails uncheck all checkboxes in gridview 
     else { 
      for (i = 0; i < gvcheck.rows.length; i++) { 
       var inputs = gvcheck.rows[i].getElementsByTagName('input'); 
       inputs[0].checked = false; 
      } 
     } 
    } 
</script> 
<asp:GridView ID="gvdetails" runat="server" > 
     <Columns> 
      <asp:TemplateField> 
       <HeaderTemplate> 
        <asp:CheckBox ID="chkheader" runat="server" onclick="javascript:SelectAll(this)" /> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkchild" runat="server" onclick="javascript:UncheckHeader(this)" /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
более

детали here