关于CheckBox 在DataList中分页全选问题

Boring_life 2012-09-21 07:04:12

翻页后 前一页 选中了CheckBox 就失效了

如何实现翻页全选
...全文
87 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
孟子E章 2012-09-21
  • 打赏
  • 举报
回复
Gridview的例子,DataList也可以类似


GET 方式实现 GridView 跨页面多选

使用 POST 方式,使用控件很容易解决这个问题,但是 GET 方式,存储数据的方式有限,可以采取 Cookie 存储选择的数据,也可以使用 Ajax 到服务器端进行保存。对于超过Cookie限制的地方,采用 Ajax 是很好的方法。下面就是采取 Cookie 保存数据的例子。


ASPX 代码

<%@ 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>

孟子E章 2012-09-21
  • 打赏
  • 举报
回复
记录到COOKIE中

62,133

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧