我平常用gridview来绑定dataset从来也没有用过datatable,所以datatable从来没有用过更别谈分页了。
想求一个源代码,给datatable绑定数据,分页,实现增删改查像gridview那样的。解决后立刻结贴。

解决方案 »

  1.   

    控件分页的using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Data.OleDb;
    using System.IO;
    using System.Drawing;public partial class display_display : System.Web.UI.Page
    {
        int CurrentPage;//当前页数
        int PageSize;   //每页条数
        int PageCount;  //总页数
        int RecordCount;//总条数
        public string SubStr(string sString, int nLeng)
        {
            if (sString.Length <= nLeng)
            {
                return sString;
            }
            string sNewStr = sString.Substring(0, nLeng);
            sNewStr = sNewStr + "...";
            return sNewStr;
        }
        protected string FormatURL(object strArgument)
        {
            return "image.aspx?id=" + strArgument.ToString();
        }
        private void Page_Load(object sender, System.EventArgs e)
        {
            string pic = Request["Pic_ID"];        PageSize = 9;//每页10条记录
            if (!Page.IsPostBack)
            {
                CurrentPage = 0;//当前页习惯设为0
                ViewState["PageIndex"] = 0;//页索引也设为0
                //计算总共有多少记录
                RecordCount = CalculateRecord();
                //计算总共有多少页
                if (RecordCount % PageSize == 0)
                {
                    PageCount = RecordCount / PageSize;
                }
                else
                {
                    PageCount = RecordCount / PageSize + 1;
                }            this.TotalLbl.Text = PageCount.ToString();//显示总页数
                ViewState["PageCount"] = PageCount;//会话session 对整个 application 有效 ,而视图状态 viewstate相当于某个页面的 session            this.DataListBind();//不可以放在初始化条件之前就绑定,那样的话,如果仅有一页的数据,“下一页”页仍然显示        }
        }
        //计算总共有多少条记录
        private int CalculateRecord()
        {
            try
            {
                int recordCount;
                OleDbConnection oc = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Server.MapPath(@"~\App_Data\DataBase.aspx")); //数据库使用Northwind;
                oc.Open();
                string OleDb = "select count(*) as [count] from Picture";
                OleDbCommand cmd = new OleDbCommand(OleDb, oc);
                OleDbDataReader sdr = cmd.ExecuteReader();            if (sdr.Read())
                {
                    recordCount = Int32.Parse(sdr["count"].ToString());
                }
                else
                {
                    recordCount = 0;
                }            sdr.Close();
                oc.Close();
                return recordCount;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        //将数据绑定到Datalist控件
        public void DataListBind()
        {
            try
            {
                int StartIndex = CurrentPage * PageSize;//设定导入的起终地址
                string OleDb = "SELECT [Pic_ID], [Pic],[Pic_Title] FROM [Picture] order by [Pic_id] desc";
                DataSet ds = new DataSet();
                OleDbConnection oc = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=" + Server.MapPath(@"~\App_Data\DataBase.aspx"));
                oc.Open();            OleDbDataAdapter sda = new OleDbDataAdapter(OleDb, oc);
                sda.Fill(ds, StartIndex, PageSize, "Picture");//这是sda.Fill方法的第一次重载,里面的变量分别是数据集DataSet ,开始记录数StartRecord,最大的记录数MaxRecord,数据表名TableName
                this.DataList1.DataSource = ds.Tables["Picture"].DefaultView;
                this.DataList1.DataBind();
                this.PreviousLB.Enabled = true;
                this.NextLB.Enabled = true;
                if (CurrentPage == (PageCount - 1)) this.NextLB.Enabled = false;//当为最后一页时,下一页链接按钮不可用
                if (CurrentPage == 0) this.PreviousLB.Enabled = false;//当为第一页时,上一页按钮不可用
                this.CurrentLbl.Text = (CurrentPage + 1).ToString();//当前页数        }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public void LinkButton_Click(Object sender, CommandEventArgs e)//自己编写的按钮点击事件
        {
            CurrentPage = (int)ViewState["PageIndex"];//获得当前页索引
            PageCount = (int)ViewState["PageCount"];//获得总页数
            string cmd = e.CommandName;        //判断cmd,以判定翻页方向
            switch (cmd)
            {
                case "prev"://上一页
                    if (CurrentPage > 0) CurrentPage--;
                    break;            case "next":
                    if (CurrentPage < (PageCount - 1)) CurrentPage++;//下一页
                    break;            case "first"://第一页
                    CurrentPage = 0;
                    break;            case "end"://最后一页
                    CurrentPage = PageCount - 1;
                    break;            case "jump"://跳转到第几页
                    if (this.TextBox1.Text.Trim() == "" || Int32.Parse(this.TextBox1.Text.Trim()) > PageCount)//如果输入数字为空或超出范围则返回
                    {
                        return;
                    }
                    else
                    {
                        CurrentPage = Int32.Parse(this.TextBox1.Text.ToString()) - 1;
                        break;
                    }
            }
            ViewState["PageIndex"] = CurrentPage;//获得当前页        this.DataListBind();//重新将DataList绑定到数据库
        }
       
        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
            ImageButton ibt = (ImageButton)sender;
        
                    this.Response.Redirect(@"~\display\pic.aspx?Pic_ID=" + ibt.CommandArgument);
                 // Response.Redirect(@"~\photo.aspx?pic_id =" + ImageButton1.CommandArgument.ToString());
        }
    }
      

  2.   

    代码SQL分页的using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Text;namespace ImportantProblem
    {
        public partial class Finish : System.Web.UI.Page
        {
            int CurrentPage;//当前页数
            int PageSize;   //每页条数
            int PageCount;  //总页数
            int RecordCount;//总条数
            protected void Page_Load(object sender, EventArgs e)
            {
                PageSize = 10;//每页10条记录
                if (!this.IsPostBack)
                {
                    CurrentPage = 0;//当前页习惯设为0
                    ViewState["PageIndex"] = 0;//页索引也设为0
                    //计算总共有多少记录
                    RecordCount = returnRow();
                    //计算总共有多少页
                    if (RecordCount % PageSize == 0)
                    {
                        PageCount = RecordCount / PageSize;
                    }
                    else
                    {
                        PageCount = RecordCount / PageSize + 1;
                    }                this.TotalLbl.Text = PageCount.ToString();//显示总页数
                    ViewState["PageCount"] = PageCount;//会话session 对整个 application 有效 ,而视图状态 viewstate相当于某个页面的 session
                    GetShowData(); //不可以放在初始化条件之前就绑定,那样的话,如果仅有一页的数据,“下一页”页仍然显示
                }
            }
            #region 返回部门行数
            /// <summary>
            /// 返回部门行数
            /// </summary>
            /// <param name="sWhere"></param>
            /// <returns></returns>
            private int returnRow()
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select count(*) from message where (ZRFLAG = 0 or ZGFLAG = 0 or DBFLAG = 0) ");
                //Class.DbHelperOleDb.ExecuteScalar(sb.ToString());
                return Class.DbHelperOleDb.ExecuteScalar(sb.ToString());
            }
            #endregion
            private void GetShowData()
            {
                int StartIndex = CurrentPage * PageSize;//设定导入的起终地址
                this.PreviousLB.Enabled = true;
                this.NextLB.Enabled = true;
                if (CurrentPage == (PageCount - 1)) this.NextLB.Enabled = false;//当为最后一页时,下一页链接按钮不可用
                if (CurrentPage == 0) this.PreviousLB.Enabled = false;//当为第一页时,上一页按钮不可用
                this.CurrentLbl.Text = (CurrentPage + 1).ToString();//当前页数            StringBuilder sb = new StringBuilder();
                if (CurrentPage == 0 || ViewState["PageIndex"] == null)
                {
                    sb.Append("SELECT TOP " + PageSize + "  *");
                    sb.Append(" FROM message ");
                    sb.Append("  where (DBFLAG = 1) ");
                }
                else
                {
                    sb.Append("SELECT TOP " + PageSize + "  *");
                    sb.Append(" FROM message ");
                    sb.Append(" WHERE (messageid NOT IN ");
                    sb.Append(" (SELECT TOP " + StartIndex + " messageid ");
                    sb.Append(" FROM message where (DBFLAG = 1) )) and ( DBFLAG = 1) ");            }
                Session["CurrentPage"] = true;
                       
                this.MessageShow1.GetSelectData(sb.ToString (), " order by sjwcsJ DESC ", true); 
                Session["CurrentPage"] = false;
            }        public void LinkButton_Click(Object sender, CommandEventArgs e)//自己编写的按钮点击事件
            {
                CurrentPage = (int)ViewState["PageIndex"];//获得当前页索引
                PageCount = (int)ViewState["PageCount"];//获得总页数
                string cmd = e.CommandName;            //判断cmd,以判定翻页方向
                switch (cmd)
                {
                    case "prev"://上一页
                        if (CurrentPage > 0) CurrentPage--;
                        break;                case "next":
                        if (CurrentPage < (PageCount - 1)) CurrentPage++;//下一页
                        break;                case "first"://第一页
                        CurrentPage = 0;
                        break;                case "end"://最后一页
                        CurrentPage = PageCount - 1;
                        break;                case "jump"://跳转到第几页
                        if (this.TextBox1.Text.Trim() == "" || Int32.Parse(this.TextBox1.Text.Trim()) > PageCount)//如果输入数字为空或超出范围则返回
                        {
                            return;
                        }
                        else
                        {
                            CurrentPage = Int32.Parse(this.TextBox1.Text.ToString()) - 1;
                            break;
                        }
                }
                ViewState["PageIndex"] = CurrentPage;//获得当前页            this.GetShowData();//重新将DataList绑定到数据库
            }        }
    }
      

  3.   

    select DISTINCT * from BOOK_ADDR
      

  4.   

    前台分页按钮的控件在SQL语句分页和控件分页都可以用
           <asp:LinkButton ID="FirstLB" runat="server" CommandName="first" OnCommand="LinkButton_Click">第一页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="PreviousLB" runat="server" CommandName="prev" OnCommand="LinkButton_Click">上一页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="NextLB" runat="server" CommandName="next" OnCommand="LinkButton_Click">下一页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="EndLB" runat="server" CommandName="end" OnCommand="LinkButton_Click">最后一页</asp:LinkButton>
                    &nbsp; 总<asp:Label ID="TotalLbl" runat="server"></asp:Label>页 当前第<asp:Label ID="CurrentLbl"
                        runat="server"></asp:Label>页
                    <asp:LinkButton ID="JumpLB" runat="server" CommandName="jump" OnCommand="LinkButton_Click">跳到</asp:LinkButton>第
                    <asp:TextBox ID="TextBox1" runat="server" Width="90px"></asp:TextBox>
                    页