When you are having check boxes column inside a GridView, some times you may need to enable paging in GridView. You might have noticed that when you change the page index, the checked state of check boxes in the previous page is lost. This happens due to the page post back occurs when you are changing the page index. Below code will help you to keep the checked state of the check boxes during the page post backs.
.aspx Syntax:
Below is a our GridView with a DataKey Value "NewMobileID" ("NewMobileID" is the primary key of the data source that i'm binding to the GridView, this Data key name should change according to your own data source) and few columns.<asp:GridView ID="gvitemStock" runat="server" AutoGenerateColumns="False" PageSize="50" AllowSorting="True" AllowPaging="True" DataKeyNames="NewMobileID" onpageindexchanging="gvitemStock_PageIndexChanging" onprerender="gvitemStock_PreRender"> <Columns> <asp:TemplateField HeaderStyle-HorizontalAlign="left" ItemStyle-HorizontalAlign="left" Visible="true"> <ItemTemplate> <asp:CheckBox ID="chkPo" runat="server"/> </ItemTemplate> <HeaderStyle HorizontalAlign="Left"></HeaderStyle> <ItemStyle HorizontalAlign="Left"></ItemStyle> </asp:TemplateField> <asp:TemplateField HeaderText="Name" HeaderStyle-HorizontalAlign="left" ItemStyle-HorizontalAlign="left" Visible="true"> <HeaderTemplate> Imi # </HeaderTemplate> <ItemTemplate> <asp:Label ID="lblPoNo" runat="server" Text='<%# Eval("ImiNo") %>' /> </ItemTemplate> <HeaderStyle HorizontalAlign="Left"></HeaderStyle> <ItemStyle HorizontalAlign="Left"></ItemStyle> </asp:TemplateField> </Columns> </asp:GridView>.CS Source Code:
DataTable DT; List<int> arrSelectedItems; protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { BindData(); } arrSelectedItems = new List<int>(); } private void BindData() { DT = new DataTable(); DT = NewMobileFa.GetNewMobile();//this is where we get our data source gvitemStock.DataSource = DT; gvitemStock.DataBind(); ViewState["BindData"] = DT; } private void BindFromViewState() { if (ViewState["BindData"] != null) { DT = new DataTable(); DT = (DataTable)ViewState["BindData"]; gvitemStock.DataSource = DT; gvitemStock.DataBind(); } } private void SaveCheckBoxState() { if (arrSelectedItems != null) { if (ViewState["SaveState"] != null) { arrSelectedItems = (List<int>)ViewState["SaveState"]; } foreach (GridViewRow item in gvitemStock.Rows) { try { if (item.RowType == DataControlRowType.DataRow) { CheckBox chk = (CheckBox)(item.Cells[0].FindControl("chkPo")); if (chk.Checked) { if (!arrSelectedItems.Contains(Convert.ToInt32(gvitemStock.DataKeys[item.RowIndex].Values["NewMobileID"].ToString()))) arrSelectedItems.Add(Convert.ToInt32(gvitemStock.DataKeys[item.RowIndex].Values["NewMobileID"].ToString())); } else { if (arrSelectedItems.Contains(Convert.ToInt32(gvitemStock.DataKeys[item.RowIndex].Values["NewMobileID"].ToString()))) arrSelectedItems.Remove(Convert.ToInt32(gvitemStock.DataKeys[item.RowIndex].Values["NewMobileID"].ToString())); } } ViewState["SaveState"] = arrSelectedItems; } catch (Exception ex) { throw ex; } } } }
protected void gvitemStock_PageIndexChanging(object sender, GridViewPageEventArgs e) { SaveCheckBoxState(); gvitemStock.PageIndex = e.NewPageIndex; BindFromViewState(); }
protected void gvitemStock_PreRender(object sender, EventArgs e) { if (arrSelectedItems != null) { arrSelectedItems = (List<int>)ViewState["SaveState"]; foreach (GridViewRow item in gvitemStock.Rows) { if (item.RowType == DataControlRowType.DataRow) { CheckBox chkbox = (CheckBox)item.FindControl("chkPo"); if (arrSelectedItems != null) { if (arrSelectedItems.Contains(Convert.ToInt32(gvitemStock.DataKeys[item.RowIndex].Values["NewMobileID"].ToString()))) { chkbox.Checked = true; } } } } } }
No comments:
Write comments