我做了一个checkbox的选择框  把一个gridview的数据选择出来  放到另一个数据集中 但是发现选择的,
一翻页就checkbox的选择就没有了  只能做当前页面的选择保存 
请高手教下我怎么翻页也可一个保存

解决方案 »

  1.   

    当时我做的在线测试为了把这个勾保存下来用了ViewState……相当痛苦……调试了不下百余遍……
      

  2.   

    GridView可以在模板里使用CheckBox控件,但是很遗憾的是,如果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,表示启用了分页,而且分页大小为5。DataKeyNames设置为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();}
      

  3.   

    看看这个吧。可能对你有帮助
    http://battler.cnblogs.com/archive/2005/03/19/121804.html
      

  4.   

    你在 翻页时 就把数据 传过去(加到你要放的位置)
    或用sessin
      

  5.   

    我先开始想使用AJAX技术,把GridView放于UpdatePlane之中,在UpdatePlane之外放一个runat="server"的hidden控件,用JS控制checkbox勾中时,将勾中的那一行主键串成用“|”隔开的字符串存在hidden中,只要大页面不刷新,hidden里头的值不会丢失,分页动作在UpdatePlane块中执行,保存的时候取hidden的value,按“|”split,然后逐个操作。后来又想如果这样都能行得通,也不用UpdatePlane了,在界面上丢个<iframe>,src=GridView所在的页面,也是用runat="server"的hidden保存勾中的主键,翻页是<iframe>里面在刷,外面的页面不刷,hidden的值也不会丢,保存按钮放外面,交互的时候参照hidden的value。当然用Session最简单直接,但是很多人说Session占资源,各位怎么看,请指教。
      

  6.   

    必须先弄到Session,等需要时再读取Session
      

  7.   

    只有用SESSION COOKIE 什麼的。因為WEBFORM 是一個狀態的。不像WINFORM 可以顯示在客戶機的內存裏的