Click here to Skip to main content
15,867,750 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:

Hi,
Here i want to maintain state and count of gridview checkbox during paging. i.e i want to show (no) of Rows Selected of gridview.
See the following code it only shows pagewise count that means suppose 2 records on 1st page are selected and 4 records on 2 nd page are selected then it shows 2 on first page and 4 on 2 and page.
here i want show total count of selected records .i.e on 1st page it will be 2 and 2 nd it will be 6 like that.

What I have tried:

<asp:GridView ID="gvAppvrDetail" runat="server" AutoGenerateColumns="False"
      AllowPaging="true" PageSize="10"  Width="1000PX"
      onpageindexchanging="gvAppvrDetail_PageIndexChanging"
      onrowdatabound="gvAppvrDetail_RowDataBound"  >
      <Columns>
        <asp:TemplateField>
         <HeaderTemplate>
         <asp:CheckBox ID="ChkAll" runat="server" onclick="javascript:SelectAllCheckboxes(this);" >
         </asp:CheckBox>
        </HeaderTemplate>
        <ItemTemplate>
        <asp:CheckBox ID="ChkChild" runat="server"  onclick="CheckBoxCount();"   OnCheckedChanged="ChkChild_CheckedChanged" >
            </asp:CheckBox>
        </ItemTemplate>
        </asp:TemplateField>

</Columns>

</asp:GridView>


and code of
gvAppvrDetail_PageIndexChanging
like that

protected void gvAppvrDetail_PageIndexChanging(object sender, GridViewPageEventArgs e)
       {
           gvAppvrDetail.PageIndex = e.NewPageIndex;
           BindGridview(Request.QueryString["PREFIX"].ToString());

           //Code to maintain selected record while paging

           if (ViewState["SelectedRows"] != null)
           {
               List<string> selectedItems = (List<string>)ViewState["SelectedRows"];
               foreach (GridViewRow row in gvAppvrDetail.Rows)
               {

                   Label lblEntryNo = (Label)row.FindControl("lblEntryNo");

                   var result = selectedItems.Find(item => item == lblEntryNo.Text);
                   if (result != null)
                   {
                       CheckBox chk = (CheckBox)row.FindControl("ChkChild");
                       if (chk != null)
                       {
                            chk.Checked = true;
                            ViewState["Count"] = Convert.ToInt32(ViewState["Count"]) + 1;
                            lblcntRows.Text = ViewState["Count"].ToString();
                       }
                   }
               }
           }
           //BindGridview(Request.QueryString["PREFIX"].ToString());
       }



and code of
ChkChild_CheckedChanged
like that

protected void ChkChild_CheckedChanged(object sender, EventArgs e)
      {
          CheckBox chkStatus = (CheckBox)sender;
          GridViewRow selectedrow = (GridViewRow)chkStatus.NamingContainer;

          //Getting selected records from View state
          List<string> selectedItems = null;

          if (ViewState["SelectedRows"] != null)
          {
              selectedItems = (List<string>)ViewState["SelectedRows"];
          }
          else
          {
              selectedItems = new List<string>();
          }

          Label lblEntryNo = (Label)selectedrow.FindControl("lblEntryNo");


          if (chkStatus.Checked)
          {
             selectedItems.Add(lblEntryNo.Text);

          }
          else
           {
              var result = selectedItems.Find(item => item == lblEntryNo.Text);

              if (result != null)
              {
                  selectedItems.Remove(lblEntryNo.Text);
              }
          }

          //Assigning Selected records to ViewState
          ViewState["SelectedRows"] = selectedItems;
      }



Please help me.
Posted
Comments
SujataJK 18-Dec-17 3:48am    
see the following javascript code for count(selected entries)


function SelectAllCheckboxes(chk) {
$('#&lt;%=gvAppvrDetail.ClientID %>').find("input:checkbox").each(function () {
if (this != chk) {
this.checked = chk.checked;
}
});
CheckBoxCount1();
}
function CheckBoxCount1() {
var gv = document.getElementById("&lt;%= gvAppvrDetail.ClientID %>");
var inputList = gv.getElementsByTagName("input");
var numChecked = -1;

for (var i = 0; i &lt; inputList.length; i++) {
if (inputList[i].type == "checkbox" && inputList[i].checked) {
numChecked = numChecked + 1;
}
}
var label = document.getElementById("&lt;%=lblcntRows.ClientID %>");

label.innerHTML = numChecked;
document.getElementById("&lt;%=lblcntRows.ClientID %>").value = label.innerHTML;

}


function CheckBoxCount() {
var gv = document.getElementById("&lt;%= gvAppvrDetail.ClientID %>");
var inputList = gv.getElementsByTagName("input");
var numChecked = 0;

for (var i = 0; i &lt; inputList.length; i++) {
if (inputList[i].type == "checkbox" && inputList[i].checked) {
numChecked = numChecked + 1;
}
}

var label = document.getElementById("&lt;%=lblcntRows.ClientID %>");

label.innerHTML = numChecked;

document.getElementById("&lt;%=lblcntRows.ClientID %>").value = label.innerHTML;
}
Sinisa Hajnal 18-Dec-17 8:12am    
Step through the code and see when the count is lost. Try using session instead of view state. The code looks alright on the quick pass
Laxmidhar tatwa technologies 18-Dec-17 9:37am    
sir Instated of viewstate if would like to store in session object
I think your problem will be solved
SujataJK 19-Dec-17 4:19am    
i tried using session instead of viewstate but problem remains same.
SujataJK 21-Dec-17 7:28am    
thanks all.
I solved the problem.In above case i just forgot to set autopostback="true" property of checkbox.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900