前几天在过去跟设备处的老师沟通的过程中,提出有一个需求就是需要对Checkbox实现跨页选择的功能,之前类似的东西也并没有做过,但是想想既然客户都提的出这样的需求,功能上应该是已经存在的,也肯定是有看见过类似的东西的,就直接先答应了回来进行技术处理。
  第一次Bing让我这么的失望,居然找不到类似的记录,后来还是返回常用的Google,有幸可以找到一些类似的代码片段,但是好像并不能解决我遇到的问题,因为哪些代码不熟悉好像都是JSP的,也有提出用Cookies来保存状态的,但是好像处理Cookies也不简单(应该说是具麻烦的那种)。浏览中发现有一个思路挺好的,使用隐藏值来保存选择的Checkbox值,下面我先发布实现这个功能要用到的代码(Asp的话稍微做下修改应该也是可行的)。

1、创建一个隐藏值:
<input type="hidden" id="SelectID" name="SelectID" value="<%=SelectID%>" />,其中SelectID为后台定义为public string SelectID = string.Empty;
2、Aspx页面相关代码:
<input type="checkbox" id="CheckBox1" name="CheckBox1" value="1">这句很重要,否则你在删除的时候将不能清除选择的值。
<script language="javascript" type="text/javascript">
//设置页面的Checkbox选择状态
$(document).ready(function() {
        SelectValue(document.form1);
});
//这里是实现的功能,翻页之后判断该页面是否有Checkbox为选择的状态
function SelectValue(obj)
{
        obj = eval(obj);
        var _Sid=$("#SelectID").val();
        for (var i=0; i<obj.elements.length; i++){
                if (obj.elements.type == "checkbox" && obj.elements.name == "CheckBox1") {
                        if (_Sid.indexOf(obj.elements.value+",")!=-1)
                        {
                                obj.elements.checked = true;
                        }
                }
        }
}
//清除Checkbox选择的值,这里用了replace函数简化代码的操作
function  ClearSelectValue(obj) 
{
        var _Sid=$("#SelectID").val();
        if (obj.checked==true)
        {
                _Sid+=obj.value+",";
                $("#SelectID").attr("value", _Sid);
        }
        else
        {
                _Sid=_Sid.replace(obj.value+",","");
                $("#SelectID").attr("value", _Sid);
        }
}
</script>
3、Aspx.Cs相关代码:
  protected void PageNavigator1_PageChange(object sender, int PageIndex)
    {
        GridViewDataBind(PageIndex);
        SelectID = Request.Form["SelectID"];
        string ChkValue = Request.Params["CheckBox1"];
        if (!string.IsNullOrEmpty(ChkValue))
        {
            string[] _ChkValue = ChkValue.Split(',');
            for (int i = 0; i < _ChkValue.Length; i++)
            {
                if (SelectID.IndexOf(_ChkValue + ',') == -1)
                {
                    SelectID += _ChkValue+",";
                }
            }
        }
    }
以上这段代码仅在翻页的时候响应