gridview的分页保存 我做了一个checkbox的选择框 把一个gridview的数据选择出来 放到另一个数据集中 但是发现选择的,一翻页就checkbox的选择就没有了 只能做当前页面的选择保存 请高手教下我怎么翻页也可一个保存 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 当时我做的在线测试为了把这个勾保存下来用了ViewState……相当痛苦……调试了不下百余遍…… 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();} 看看这个吧。可能对你有帮助http://battler.cnblogs.com/archive/2005/03/19/121804.html 你在 翻页时 就把数据 传过去(加到你要放的位置)或用sessin 我先开始想使用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占资源,各位怎么看,请指教。 必须先弄到Session,等需要时再读取Session 只有用SESSION COOKIE 什麼的。因為WEBFORM 是一個狀態的。不像WINFORM 可以顯示在客戶機的內存裏的 不能修改asp.net网页form的action 字符串随机插入 C#中得到的对象无法保存到session中 哪有在线客服asp.net源代码 一个程序段需求帮忙!! .Net 如何连接Oracle?(有难度) 【2个有关DataGrid的小题,1题50分,解决了马上结贴!!!!】 請問如何過濾掉column? 网页视频聊天怎么做? 上传文件除了用控件外还有什么能用? 将用户控件编译成.dll 帮我注释一下代码
http://battler.cnblogs.com/archive/2005/03/19/121804.html
或用sessin