I'm trying to work through some examples to understand how to make CheckBoxes
remain selected when paginating through GridView
.
I'm trying to replicate an example of paging through the GridView
. I'm using the following example:
The only difference is that I use my own GridView as following:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="GridViewExample._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:GridView ID="gvCustomers" DataKeyNames="Key" PageSize="4" AllowPaging="true" OnPageIndexChanging="gvCustomersPageChanging" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Checked="false" Value='<%#Eval("Key") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Key">
<ItemTemplate>
<%# Eval("Key") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="First Name">
<ItemTemplate>
<%# Eval("FirstName") %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Name">
<ItemTemplate>
<%# Eval("LastName") %>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</asp:Content>
This is the data loading logic:
protected void Page_Load(object sender, EventArgs e)
{
BindData();
}
private void BindData()
{
var customers = new List<Customer>{
new Customer { FirstName = "Mohammad", LastName = "Azam", Key = 1},
new Customer { FirstName = "John", LastName = "Doe", Key = 2},
new Customer { FirstName = "Mary", LastName = "Kate", Key = 3},
new Customer { FirstName = "Jerry", LastName = "Seinfeld", Key = 4},
new Customer { FirstName = "Alex", LastName = "Rowe", Key = 5},
new Customer { FirstName = "James", LastName = "Smith", Key = 9},
new Customer { FirstName = "Jerry", LastName = "Grand", Key = 10},
new Customer { FirstName = "Thomas", LastName = "Anders", Key = 11},
new Customer { FirstName = "Diter", LastName = "Bolen", Key = 12},
new Customer { FirstName = "Ryan", LastName = "McDonag", Key = 13},
new Customer { FirstName = "Stewart", LastName = "Black", Key = 14},
new Customer { FirstName = "James", LastName = "Soth", Key = 15},
new Customer { FirstName = "Alex", LastName = "Bowldwin", Key = 18},
new Customer { FirstName = "Arnold", LastName = "Strong", Key = 19},
};
gvCustomers.DataSource = (from c in customers select c).ToList();
gvCustomers.DataBind();
}
This is the code from the example:
private void RememberOldValues()
{
ArrayList categoryIDList = new ArrayList();
int index = -1;
foreach (GridViewRow row in gvCustomers.Rows)
{
index = (int)gvCustomers.DataKeys[row.RowIndex].Value;
bool result = ((CheckBox)row.FindControl("chkSelect")).Checked;
string id = ((CheckBox)row.FindControl("chkSelect")).ClientID;
// Check in the Session
if (Session["CHECKED_ITEMS"] != null)
categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
if (result)
{
if (!categoryIDList.Contains(index))
categoryIDList.Add(index);
}
else
categoryIDList.Remove(index);
}
if (categoryIDList != null && categoryIDList.Count > 0)
Session["CHECKED_ITEMS"] = categoryIDList;
}
private void RePopulateValues()
{
ArrayList categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
if (categoryIDList != null && categoryIDList.Count > 0)
{
foreach (GridViewRow row in gvCustomers.Rows)
{
int index = (int)gvCustomers.DataKeys[row.RowIndex].Value;
if (categoryIDList.Contains(index))
{
CheckBox myCheckBox = (CheckBox)row.FindControl("chkSelect");
myCheckBox.Checked = true;
}
}
}
}
The problem is even though I select the checkbox, when debugging the following line:
bool result = ((CheckBox)row.FindControl("chkSelect")).Checked;
in RememberOldValues()
method, result
is always false
Why is that? Any ideas?
Aucun commentaire:
Enregistrer un commentaire