关于CheckBox 在DataList中分页全选有关问题
关于CheckBox 在DataList中分页全选问题
翻页后 前一页 选中了CheckBox 就失效了
如何实现翻页全选
------解决方案--------------------
Gridview的例子,DataList也可以类似
GET 方式实现 GridView 跨页面多选
使用 POST 方式,使用控件很容易解决这个问题,但是 GET 方式,存储数据的方式有限,可以采取 Cookie 存储选择的数据,也可以使用 Ajax 到服务器端进行保存。对于超过Cookie限制的地方,采用 Ajax 是很好的方法。下面就是采取 Cookie 保存数据的例子。
ASPX 代码
翻页后 前一页 选中了CheckBox 就失效了
如何实现翻页全选
------解决方案--------------------
Gridview的例子,DataList也可以类似
GET 方式实现 GridView 跨页面多选
使用 POST 方式,使用控件很容易解决这个问题,但是 GET 方式,存储数据的方式有限,可以采取 Cookie 存储选择的数据,也可以使用 Ajax 到服务器端进行保存。对于超过Cookie限制的地方,采用 Ajax 是很好的方法。下面就是采取 Cookie 保存数据的例子。
ASPX 代码
- HTML code
<%@ Page Language="C#" Debug="false" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> String Articles = String.Empty; protected void Page_Load(object sender, EventArgs e) { if (Request.Cookies["ArticleId"]!=null) Articles = Request.Cookies["ArticleId"].Value; Articles = Server.UrlDecode(Articles); string xlsConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MengxianHui.mdb"; OleDbConnection cn = new OleDbConnection(xlsConnStr); cn.Open(); String sql = "SELECT Count(*) FROM [Document]"; OleDbCommand cmd = new OleDbCommand(sql, cn); // 总的记录数 int TotalCount = Convert.ToInt32(cmd.ExecuteScalar()); //当前页的序号 int PageIndex = 1; String page = Request.QueryString["Page"]; if (page == null) page = "1"; if (!Int32.TryParse(page, out PageIndex)) PageIndex = 1; if (PageIndex < 1) PageIndex = 1; //每页显示的数量 int PageItem = 5; int startRecord = (PageIndex - 1) * PageItem; sql = "SELECT [ArticleId],[Title],[CreateDate],[Author] FROM [Document] Order By [ArticleId] DESC"; OleDbDataAdapter da = new OleDbDataAdapter(sql, cn); DataSet ds = new DataSet(); da.Fill(ds, startRecord, PageItem, "Document"); GridView1.DataSource = ds.Tables[0].DefaultView; GridView1.DataBind(); BuildPagers(TotalCount, PageIndex, PageItem); cn.Dispose(); } private void BuildPagers(int TotalCountRecord, int CurrentPage, int PageItem) { int Step = 6; int LeftNum = 0; int RightNum = 0; String PageUrl = "?"; int PageCount = (int)Math.Ceiling((double)(TotalCountRecord) / PageItem); if (CurrentPage - Step < 1) { LeftNum = 1; } else { LeftNum = CurrentPage - Step; } if (CurrentPage + Step > PageCount) { RightNum = PageCount; } else { RightNum = CurrentPage + Step; } string OutPut = ""; for (int i = LeftNum; i <= RightNum; i++) { if (i == CurrentPage) { OutPut += "<span style='color:red'>" + i.ToString() + "</span> "; } else { OutPut += "<a href=\"" + PageUrl + "Page=" + i.ToString() + "\">" + i.ToString() + "</a> "; } } if (CurrentPage > 1) { OutPut = "<a href='" + PageUrl + "Page=1'>首页</a> <a href=\"" + PageUrl + "Page=" + (CurrentPage - 1) + "\">上一页</a> " + OutPut; } if (CurrentPage < PageCount) { OutPut += " <a href=\"" + PageUrl + "Page=" + (CurrentPage + 1) + "\">下一页</a> <a href='" + PageUrl + "Page=" + PageCount + "'>末页</a>"; } Pager.InnerHtml = OutPut; } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { String CurrentArticleId = DataBinder.Eval(e.Row.DataItem, "ArticleId").ToString(); CheckBox ArticleId = e.Row.FindControl("ArticleId") as CheckBox; ArticleId.Attributes.Add("onclick", "SetArticleId(this," + CurrentArticleId + ")"); if (Articles.IndexOf("|" + CurrentArticleId + "|") > -1) { ArticleId.Checked = true; } } } protected void Button1_Click(object sender, EventArgs e) { String[] ids = Articles.Split('|'); for (int i = 0; i < ids.Length; i++) { if (!ids[i].Trim().Equals(String.Empty)) { Response.Write("<li>" + ids[i]); } } } </script> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title>GET 方式实现 GridView 跨页面多选</title> <script type="text/javascript"> function SetArticleId(o, i) { if (o.checked) { AddCookie(i) } else { RemoveCookie(i) } } function SetCookie(name, value) { document.cookie = name + "=" + escape(value); } function GetCookie(name) { if (document.cookie.length > 0) { c_start = document.cookie.indexOf(name + "="); if (c_start != -1) { c_start = c_start + name.length + 1; c_end = document.cookie.indexOf(";", c_start); if (c_end == -1) c_end = document.cookie.length; return unescape(document.cookie.substring(c_start, c_end)); } } return ""; } function AddCookie(i) { d = GetCookie("ArticleId"); if (d == "") d = "|"; if (d.indexOf("|" + i + "|") == -1) { d += i + "|"; SetCookie("ArticleId", d); } } function RemoveCookie(i) { d = GetCookie("ArticleId"); var reg = new RegExp("\\|" + i + "\\|"); if (reg.test(d)) { d = d.replace(reg, "|"); SetCookie("ArticleId", d); } } </script> </head> <body> <form id="form1" runat="server"> <asp:GridView ID="GridView1" runat="server" CellPadding="6" ShowHeader="false" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:CheckBox ID="ArticleId" runat="server" /></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <div id="Pager" runat="server"></div> <asp:Button ID="Button1" runat="server" Text="查看所选择的ID" onclick="Button1_Click" /> </form> </body> </html>