感觉不是很懂你的意思,是asp还是asp.net

解决方案 »

  1.   

    如果你说的asp是指asp.net的话,那么这可以在asp.net代码中,将选中的数据的key(业务意义的主键,也就是你给KeyName绑定的那个东西的具体值)保存在ViewState中。例如public List<string> MySelectedKeys
    {
        get{ 
               EnsureChildControls();
               var lst=(list<string>)ViewState["sl"];
               if(lst==null)
               {
                    lst = new List<string>();
                    ViewState["sl"]= lst;
               }
               return lst;
    }这样,当每一次回发时,你可以为你的GridView模板中的CheckBox注册一个CheckedChanged事件,这个事件处理代码中去捕获这个CheckBox所在的GridView当前行、以及绑定的原始数据的主键key值,如果Checked则确认key值加入了MySelectedKeys集合;如果!Checked 则确认key值从MySelectedKeys中删除掉了。在你的GridVew的DataBound事件的处理过程中,你需要遍历一下已经绑定好的每一行,如果对应行的主键key值在MySelectedKeys集合中,则找到这一行里边的相应的CheckBox并且设置其选中。
      

  2.   

    gridview 是服务器绑定数据控件,分页如果造成页面会发,JS是无法记录上一页或者下一页的选中状态要么无刷新分页,要么数据记录在cookie,session或者其他可以读取的地方
      

  3.   

    至于你说的什么“JS语句”之类的,我建议你仔细考虑你在问什么问题。要知道asp.net控件是比较悲剧地“一遍遍刷新的”(即使是updatepanel其实也是一样,也不是真正轻量级的Ajax)。当刷新时,在浏览器端原页面上的所有内存变量全都丢失了,页面都重新加载了。JS有什么用?而如果说你在编写JS应用程序(单个页面、不回发的高效率Ajax应用程序),我看你不可能是在做这种纯客户端开发。
      

  4.   

    asp.net有着一大堆非常优秀的机制,用来让你开发出类似早期winform一样的可以自动维系控件状态数据的web应用程序。其中VeiwState就是最基本的一个。使用这个机制,你不需要操心asp.net底层是怎样处理的,开发起来非常高效。(当然要想理解asp.net而不是照抄,还是要读一些asp.net框架源代码的)如果你自己去纠结、自己设计成千上万数据的序列化和保存机制(比如你自己去纠结什么cookie中保存这个 MySelectedKeys 泛型数组的机制),那么就杯具了。有些人不好好学习asp.net,只会用一点javascript。于是什么都自己写。打开那种代码,你会立刻发现越来越乱。