惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
The GitHub Blog
The GitHub Blog
C
Check Point Blog
博客园_首页
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
F
Full Disclosure
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
G
GRAHAM CLULEY
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
博客园 - 司徒正美
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Cisco Talos Blog
Cisco Talos Blog
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
V
V2EX - 技术
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Spread Privacy
Spread Privacy
罗磊的独立博客
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security Affairs
SecWiki News
SecWiki News
Schneier on Security
Schneier on Security
O
OpenAI News
Jina AI
Jina AI
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog RSS Feed
I
InfoQ
D
Docker
P
Palo Alto Networks Blog
Recorded Future
Recorded Future
M
MIT News - Artificial intelligence
博客园 - Franky
B
Blog
Scott Helme
Scott Helme
博客园 - 叶小钗
D
DataBreaches.Net

博客园 - boulder

asp.net 利用Cookie实现免登陆(c#) - boulder - 博客园 Md5Encode 算法 javascript浮动图片 - boulder 导出Excel - boulder - 博客园 获取键盘的enter - boulder - 博客园 oracle 的float(b)转 oracle函数(关于处理小数点位数) char、varchar和varchar2的区别(转) - boulder - 博客园 生成验证码(转) - boulder - 博客园 ASP.NET 2.0利用Httphandler实现URL重写(伪URL及伪静态)(转) .net上传文件的限制 电话号码的验证表达式 在DataList中找到控件 自定义datatable 没有装Express版Sql Server 2005就不能用WebPart ? (转) form表单 input 通过查询系统表得到纵向的表结构 Codebehind CodeFile转 解决flash的虚框问题
GridView 在换页时保持CheckBox的选择
boulder · 2007-09-29 · via 博客园 - boulder

如果你需要在一个GridView中加一个CheckBox,以选择某行数据,然后进入下一页继续选择,而返回上一页时仍旧能够显示你已经选择了的数据行,那么,这里将提供一种方式给你。因为分页时,页面发生变化时,是要postback回服务器的,这样,虽然你做了选择,但是未更新到服务器,所以,不做处理的话是保存不住已经选择的项的。

思路:通过一个ArrayList来保持你已经选择的项的ID,当页索引变化时,将触发DataBinding事件,在该事件内调用CollectSelected()方法,来保存所有CheckBox选中的行,去掉那些未选中的行ID。在RowDataBound(),通过SelectedItems中保存的ID来设置是否选中,以回显你的操作。需要注意的是,在你提交的时候,一定要再调用一次CollectSelected(),以最后一次收集当前页的选中情况。

 1 protected ArrayList SelectedItems
 2    {
 3        get
 4        {
 5            return (ViewState["mySelectedItems"!= null? (ArrayList)ViewState["mySelectedItems"] : null;
 6        }

 7        set
 8        {
 9            ViewState["mySelectedItems"= value;
10        }

11    }

12    /// <summary>
13    /// 从当前页收集选中项的情况
14    /// </summary>

15    protected void CollectSelected()
16    {
17        ArrayList selectedItems = null;
18        if (this.SelectedItems == null)
19            selectedItems = new ArrayList();
20        else
21            selectedItems = this.SelectedItems;
22        for (int i = 0; i < this.gvWorks.Rows.Count; i++)
23        {
24            CheckBox cb = (CheckBox)gvWorks.Rows.FindControl("cbChoose");
25            string id = ((Label)gvWorks.Rows.FindControl("lbID")).Text;
26            if (selectedItems.Contains(id) && !cb.Checked)
27                selectedItems.Remove(id);
28            if (!selectedItems.Contains(id) && cb.Checked)
29               selectedItems.Add(id);
30       }

31       SelectedItems = selectedItems;
32    }

33 
34    protected void gvWorks_DataBinding(object sender, EventArgs e)
35    {
36       //在每一次重新绑定之前,需要调用CollectSelected方法从当前页收集选中项的情况
37       CollectSelected();
38    }

39    protected void gvWorks_RowDataBound(object sender, GridViewRowEventArgs e)
40    {
41        //这里的处理是为了回显之前选中的情况
42       if (e.Row.RowIndex > -1 && SelectedItems!=null)
43        {
44            DataRowView row = e.Row.DataItem as DataRowView;
45            CheckBox cb = (CheckBox)e.Row.FindControl("cbChoose");
46            Label lbID = (Label)e.Row.FindControl("lbID");
47            if(SelectedItems.Contains(lbID.Text))
48                cb.Checked = true;
49            else
50                cb.Checked = false;
51        }

52    }

53