DataList分页是相对比较复杂的事情(至少对于你目前的基础...)

解决方案 »

  1.   

    gridview具备分页功能,用datagrid or gridview代替datalist,在gridview中建一模板列,完全可以作出datalist的效果,演示效果:http://deyi365.com/search_list.aspx
      

  2.   

    分页有下面几种
    一个是通过存储过程 
    另一个是通过datalist
    不管哪一个 对于datalist来说都是相当的复杂
      

  3.   

    int pagesize = 4;
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = (ConfigurationManager.ConnectionStrings["ConnStr"]).ToString();
            conn.Open();
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = conn;
            cmd.CommandText = "select * from 发言 order by 发表时间 desc";
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "发言");
            DataTable jilu = ds.Tables["发言"];
            int totalr = jilu.Rows.Count;
            Label2.Text = totalr.ToString(); int totalpage;
            if (totalr < pagesize)
                totalpage = 1;
            else if (totalr % pagesize != 0)
                totalpage = totalr / pagesize + 1;
            else totalpage = totalr / pagesize;
            Label1.Text = totalpage.ToString(); Label3.Text = pageno.ToString();
            DataTable tempjilu = jilu.Clone();
            int i, j;
            for (i = (pageno - 1) * pagesize; i <pageno * pagesize ; i++)
            {
                if (i < 0 || i > jilu.Rows.Count - 1)
                    break;
                DataRow dr = tempjilu.NewRow();
                for (j = 0; j < jilu.Columns.Count - 1; j++)
                    dr[jilu.Columns[j].ColumnName] = jilu.Rows[i].ItemArray[j];
                tempjilu.Rows.Add(dr);
            }
            DataList1.DataSource = tempjilu;
            DataList1.DataBind();这是一段程序侃侃把?
    我也有问题大家多帮忙!
      

  4.   

    我自己写的程序,应该可以用PagedDataSource ps;
    private void ListBind(string type, string text)
        {
            string strCmd = "";
    string tableName = "";
            strCmd = "sql 语句";
            ds = AccessData.GetData(strCmd, tableName);
            //if(ds.Tables[tableName].Rows.Count > 1)
            ps = new PagedDataSource();
            ps.DataSource = ds.Tables[tableName].DefaultView;
            ps.AllowPaging = true;
            ps.PageSize = 5;
            ps.CurrentPageIndex = Convert.ToInt32(lblCurrentPage.Text) - 1;
            this.Label7.Text = ps.PageCount.ToString();
            if (ps.IsFirstPage)
            {//如果是最前页,上页按纽不可用
                lbnPrevPage.Enabled = false;
                this.LinkButton1.Enabled = false;
            }
            else
            {
                lbnPrevPage.Enabled = true;
                this.LinkButton1.Enabled = true;
            }
            if (ps.IsLastPage)
            {//如果是最后页,下页按纽不可用
                lbnNextPage.Enabled = false;
                this.LinkButton2.Enabled = false;
            }
            else
            {
                lbnNextPage.Enabled = true;
                this.LinkButton2.Enabled = true;
            }
            this.DataList1.DataSource = ps;
            this.DataList1.DataKeyField = "wad_id";
            this.DataList1.DataBind();
        }
    //换页按钮的程序
        protected void PageChange(object sender, EventArgs e)
        {
            string ControlID = ((Control)sender).ID;// "lbnPrevPage"
            switch (ControlID)
            {
                case "lbnPrevPage":
                    lblCurrentPage.Text = Convert.ToString(Convert.ToInt32(lblCurrentPage.Text) - 1);
                    break;
                case "lbnNextPage":
                    lblCurrentPage.Text = Convert.ToString(Convert.ToInt32(lblCurrentPage.Text) + 1);
                    break;
                case "LinkButton1":
                    lblCurrentPage.Text = "1";
                    break;
                case "LinkButton2":
                    lblCurrentPage.Text = this.Label7.Text;
                    break;
                default:
                    break;
            }
            this.ListBind(Request.QueryString["type"], Request.QueryString["txt"]);
        }
      

  5.   

    我刚写的一个分页代码, 希望可以给你点帮助private void Page_Load(object sender, System.EventArgs e)
    {
    PageSize = 5;
    rc1.Text=PageSize.ToString();
    CurrentPage=0;
    RecordCount=this.GetRecordCount();
    PageCount = (RecordCount%PageSize)>0?(RecordCount/PageSize)+1:(RecordCount/PageSize);//取出他的最大页码数采用?三元运算
    pc1.Text=PageCount.ToString();
    ArrayList al=new ArrayList();
    for(int i=1;i<PageCount+1;i++)
    {
    al.Add(i);
    }
    if(!Page.IsPostBack)
    {
    jp1.DataSource=al;
    jp1.DataBind();
    mfbind();
    }
    }
    public int GetRecordCount() 

    conn.Open();
    SqlCommand cmd=new SqlCommand("select count(*) as cnt from table_news",conn);
    int intCount=int.Parse(cmd.ExecuteScalar().ToString());
    cmd.Dispose();
    conn.Close();
    return intCount; 
    }
    private IList DataSource()
    {

    // int StartIndex; 
    // StartIndex = CurrentPage*PageSize; 
    //
    // string strSql = "select * from table_news"; 
    // DataSet ds = new DataSet(); 
    // SqlDataAdapter da = new SqlDataAdapter(strSql,conn); 
    // da.Fill(ds,StartIndex,PageSize,"table_news"); 
    // return ds.Tables["table_news"].DefaultView; 
    }
    private void mfbind()
    {
    dList.DataSource=(DataView)DataSource();
    dList.DataBind();
    fp1.Enabled=true;//面板初始化,全部的按钮控件设置用可用
    np1.Enabled = true; 
    pp1.Enabled = true; 
    lp1.Enabled=true;
    if(CurrentPage==(PageCount-1)) //如果是最后一页则下一页和末页的按钮变化不可用
    {
    np1.Enabled = false;
        lp1.Enabled=false;
    }
    if(CurrentPage==0) //如果是第一页则首页和上一页的按钮变化为不可用
    {
    pp1.Enabled = false; 
        fp1.Enabled=false;
                            }
    cp1.Text = (CurrentPage+1).ToString(); 
    }
    public void Page_OnClick(Object sender,CommandEventArgs e)  //这个函数很关键,他将处理所有面板按钮的事件

    CurrentPage =int.Parse(cp1.Text.Trim())-1; 
    PageCount =int.Parse(pc1.Text.Trim()); 
     
    string cnstr = e.CommandName; 
    switch(cnstr) 

    case "first":
    CurrentPage=0;
    break;
    case "next": 
    if(CurrentPage<(PageCount-1)) CurrentPage++; 
    break; 
    case "divv": 
    if(CurrentPage>0) CurrentPage--; 
    break;
    case "last":
    CurrentPage=PageCount-1;
    break;

    mfbind();

    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.fp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
    this.pp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
    this.np1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
    this.lp1.Command += new System.Web.UI.WebControls.CommandEventHandler(this.Page_OnClick);
    this.jp1.SelectedIndexChanged += new System.EventHandler(this.jp1_SelectedIndexChanged);
    this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion
    private void jp1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    CurrentPage=int.Parse(jp1.SelectedItem.Text.Trim())-1;
    mfbind();
    }
    }
    }
      

  6.   

    在属性里面设置DTATALIST的自动分页属性。然后再
    private void jp1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    CurrentPage=int.Parse(jp1.SelectedItem.Text.Trim())-1;
    mfbind();
    }
    }
      

  7.   

    参考一下这个方法吧:
    http://blog.csdn.net/dezwen/archive/2007/07/23/1702371.aspx
      

  8.   

    使用aspnetpager吧  这个更简单点,目前来说这个第3方控件功能不错,如果不懂的地方可以去 www.jfstudio.net 去查询一下.
      

  9.   

    重点看fill那段,这是最简单的
            看不明白就查查msdn上的fill        SqlDataAdapter myDataAdapter = new SqlDataAdapter(cmdtext, DBConnection);//创建访问数据表的DataAdapter对象
            //使用DataSet对象存放数据表
            DataSet myDataSet = new DataSet();
            int startnum = datasize * (Int32.Parse(Label1.Text) - 1);
            myDataAdapter.Fill(myDataSet, startnum, datasize, "information");
            //使用DataGrid显示数据
            DataList1.DataSource = myDataSet.Tables["information"].DefaultView;
            DataList1.DataBind();
            DBConnection.Close();
      

  10.   

    怎么这么多人用MS的控件啊,当然MS控件方面。。但我本人觉得效率很低