关于GridView翻页checkBox状态保存的问题

转载 2007年10月07日 16:41:00

主要功能:
1.实现GridView的分页功能.
2.实现GridView分页时候记录下checkBox的状态

 主要代码:

下面代码显示了GridView的使用
<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False" AllowPaging="True" 
PageSize="5" Width="324px" DataKeyNames="CategoryID"
OnPageIndexChanging="GridView1_PageIndexChanging">
<Columns>
<asp:BoundField DataField="CategoryID" HeaderText="CategoryID" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" />
<asp:TemplateField HeaderText="Select">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
 
请注意这里AllowPaging设置为true,表示启用了分页,而且分页大小为5DataKeyNames设置为CategoryID,因为他是数据库使用的主键。

使用后台代码,首先定义一个常量

 
/* QUERY */
private const string QUERY_SELECT_ALL_CATEGORIES = "SELECT * FROM Categories";
这个常量在BindData里使用用来获取数据源
private void BindData()
{
 SqlConnection myConnection = new SqlConnection(ConnectionString);
 SqlDataAdapter ad = new SqlDataAdapter(QUERY_SELECT_ALL_CATEGORIES,
 myConnection);
 DataSet ds = new DataSet();
 ad.Fill(ds, "Categories");
 GridView1.DataSource = ds;
 GridView1.DataBind();
}
 
 
保存CheckBox的值
 GridView在分页过程中并不维护CheckBox的选择状态,幸运的是,我们可以使用Session来维护CheckBox的状态,这个功能使用RememberOldValues完成
private void RememberOldValues()
{
 ArrayList categoryIDList = new ArrayList();
 int index = -1;
 foreach (GridViewRow row in GridView1.Rows)
 {
   index = (int) GridView1.DataKeys[row.RowIndex].Value;
   bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;
 
 // 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;
}
 
还原CheckBox的状态
   下一步,需要定义一个方法来还原Checkbox的状态值
 
private void RePopulateValues()
{
 ArrayList categoryIDList = (ArrayList)Session[CHECKED_ITEMS];
 if (categoryIDList != null && categoryIDList.Count > 0)
 {
 foreach (GridViewRow row in GridView1.Rows)
 {
   int index = (int)GridView1.DataKeys[row.RowIndex].Value;
 if (categoryIDList.Contains(index))
 {
   CheckBox myCheckBox = (CheckBox) row.FindControl("CheckBox1");
   myCheckBox.Checked = true;
 }
 }
 }
}
 
最后,在分页事件里调用上面两个方法
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
 RememberOldValues();
 GridView1.PageIndex = e.NewPageIndex;
 BindData();
 RePopulateValues();
}
源代码可以在我的资源里下载
注意的问题:
1.在GridView中必须设置 DataKeyNames = "数据表的主键"
2.设置CheckBox ID="checkbox1" 的属性(根据后台需要进行更改)
3.Session[CHECKED_ITEMS] 为页面的checkbox列,要加双引号 Session["CHECKED_ITEMS"]

[转]GridView翻页时保持CheckBox选择状态

 //定义翻页bool 1private bool changed=false;//定义保存选择项主键集合属性 1protected Liststring> SelectedItems2    {3 ...
  • fan158
  • fan158
  • 2007年06月18日 16:34
  • 891

GridView中CheckBox 翻页保存

在页面HTML中加入一个   里面加下面的代码.script language="javascript" type="text/javascript">     function checkbox_o...
  • liuhuan2099
  • liuhuan2099
  • 2007年10月09日 13:18
  • 416

GridView翻页记住选中的checkbox

aspx   js或者Juqery照样用,不影响     CodeBehind="TestArrangePapers.aspx.cs" Inherits="OnlineTest.Teache...
  • woshixuye
  • woshixuye
  • 2012年01月20日 14:34
  • 1416

GridView 翻页后保持checkbox选中状态

protected void gvBuyKey_PageIndexChanging(object sender, GridViewPageEventArgs e)    {        ViewSt...
  • renxingxingge
  • renxingxingge
  • 2010年08月14日 00:13
  • 1538

GridView 如何在翻页时保持CheckBox的选择

GridView 如何在翻页时保持CheckBox的选择 出处: 不详,网络资源 如果你需要在一个GridView中加一个CheckBox,以选择某行数据,然后进入下一页继续选择,而返回上一页时仍旧能...
  • zhanghefu
  • zhanghefu
  • 2006年12月29日 14:52
  • 1384

gridview 分页保存每页的Checkbox选中的值

  • 2011年04月20日 22:02
  • 3KB
  • 下载

换页时,Gridview当前页选中的CheckBox选中状态不会丢失

    客户端代码:function check(opt,id){    var chk = window.document.getElementById(opt);    if(chk.checke...
  • godpreserve
  • godpreserve
  • 2008年05月06日 16:34
  • 1545

GridView CheckBox当翻页时保存选中的项(viewstate)

  1  属性 保存全选的项#region  属性 保存全选的项  2  3    protected ArrayList SelectedItems  4    {  5        get  6...
  • gooddasenlin
  • gooddasenlin
  • 2007年11月20日 13:26
  • 1131

点击Gridview行,选中/取消选中,当前行中的Checkbox

客户端方法:function check(opt){    var chk = window.document.getElementById(opt);    if(chk.checked == tr...
  • godpreserve
  • godpreserve
  • 2008年05月06日 15:55
  • 2453

android listview + checkbox 列表上下滑动导致复选框状态丢失解决办法

以前为这个问题头疼很久.然后去忙其他事情.一直没有去整理,今天好不容易闲下来.就来整整这个listview + checkbox的问题吧 界面: listview_cell: ...
  • u010399316
  • u010399316
  • 2015年07月14日 11:54
  • 1165
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于GridView翻页checkBox状态保存的问题
举报原因:
原因补充:

(最多只允许输入30个字)