日期:2014-05-17  浏览次数:20482 次

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

翻页后 前一页 选中了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 C