VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 804|回复: 6

DataGrid中跨页面实现多选,在哪里保存选中值???

[复制链接]

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-14 11:40:01 | 显示全部楼层 |阅读模式
我使用存储过程进行分页,想用ViewState来保存DataGrid自定义模板列中checkbox跨页的选中值,但没想出来在什么地方保存checkbox的选中值。选择完点“下一页”或“上一页”后,Page_Load都显示的是DataGrid另一页面的数据,还没等我选中checkbox就已经提交了,怎么能取到值呢?(不要说孟子的例子,他用的DataGrid自带的分页,有DataGrid1_PageIndexChanged事件,我这里没有)


下面有几个写好的方法,但不知道在哪里调用SaveCheckedItems()方法,Page_Load里面好象不大行,就是这一点没想出来。。。。
----------------------------------


                //获取(创建)保存选中状态的集合
                ArrayList CheckedItemCollection
                {
                        get
                        {
                                if (ViewState["CheckedItems"] == null)
                                        ViewState["CheckedItems"] = new ArrayList();
                                return ViewState["CheckedItems"] as ArrayList;
                        }
                }

                //加入项
                private void AddCheckedItem(int key)
                {
                        ArrayList al = CheckedItemCollection;
                        if ( ! al.Contains(key))
                                al.Add(key);
                }

                //移除项
                private void RemoveCheckedItem(int key)
                {
                        ArrayList al = CheckedItemCollection;
                        if ( al.Contains(key))
                                al.Remove(key);
                }

                /* 每次翻页时,需要保存页面勾选状态。
                 * 操作逻辑:
                 *  对于选中项,将ID存入 状态集合
                 *  对于未选中项, 如果此项ID在集合中存在, 则删除。
                 */
                private void SaveCheckedItems()
                {
                        for(int i = 0 ; i < DataGrid1.Items.Count; i++)
                        {
                                CheckBox cb = DataGrid1.Items[i].Cells[0].FindControl("CheckBox1") as CheckBox;
                                if (cb != null)
                                {
                                        int key = Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);
                                        if (cb.Checked)
                                                this.AddCheckedItem(key);
                                        else
                                                this.RemoveCheckedItem(key);
                                }
                        }
                }

                /* 每次DataGrid绑定后,
                 *  需要通过此方法从 状态集合 中 装载勾选状态。
                 */
                void LoadCheckedState()
                {
                        ArrayList al = CheckedItemCollection;
                        for(int i = 0 ; i < DataGrid1.Items.Count; i++)
                        {
                                CheckBox cb = DataGrid1.Items[i].Cells[0].FindControl("CheckBox1") as CheckBox;
                                if (cb != null)
                                {
                                        int key = Convert.ToInt32(DataGrid1.Items[i].Cells[1].Text);
                                        if ( al.Contains(key) )
                                                cb.Checked = true;
                                }
                        }
                }
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-1-18 10:45:01 | 显示全部楼层
有没有人知道???难道一定要用DataGrid自带的分页(DataGrid1_PageIndexChanged)。
回复

使用道具 举报

0

主题

15

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-22 19:18:01 | 显示全部楼层
override OnPreRender(...) //把LoadCheckedState放在这里边试试。
{
LoadCheckedState();
}
回复

使用道具 举报

0

主题

15

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-22 20:00:01 | 显示全部楼层

override OnLoad(...)  //没绑定前记住所有checked 的keys.
{
SaveCheckedItems();
base.OnLoad(...);
}

override OnPreRender(...) //把LoadCheckedState放在这里边试试。绑定后,还原check.
{
LoadCheckedState();
base.OnPreRender(...);
}
回复

使用道具 举报

1

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
 楼主| 发表于 2020-7-11 17:30:02 | 显示全部楼层
OnLoad(...)、OnPreRender(...) 方法的返回类型是什么???
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-26 21:00:02 | 显示全部楼层
mark
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-26 21:15:01 | 显示全部楼层
用session
操作完了,再清除session
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表