如题,自己写了个,但感觉上很没层次感(在这就不贴出来误人子弟了)所以想看看大家的方法注:要非存储过程的,只须贴出业务层和数据层的分页代码即可

解决方案 »

  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 Microsoft.Practices.EnterpriseLibrary.Data;
    using HangBiao.AOA.ChuanBo;
    using Reform.Common;public partial class AOA_ChuanBo_DongTai_Manage : System.Web.UI.Page
    {
        Database db = DatabaseFactory.CreateDatabase("HangBiao");
        readonly int PAGE_SIZE = 10;    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                int recordCount = GetTotalTransferCount();
                if (recordCount <= PAGE_SIZE)
                {
                    BindRP();
                }
                else
                {
                    CurrentPage = 1;
                    LoadPageRecord();
                }
            }
        }    #region 当前页
        /// <summary>
        /// 当前页
        /// </summary>
        private int CurrentPage
        {
            get
            {
                if (ViewState["currentpage"] == null)
                {
                    return 1;
                }
                else
                {
                    return int.Parse(ViewState["currentpage"].ToString());
                }
            }
            set
            {
                ViewState["currentpage"] = value;
            }
        }
        #endregion    #region 计算总页数
        /// <summary>
        /// 计算总页数
        /// </summary>
        /// <returns>总页数</returns>
        private int GetPageCount()
        {
            int recordCount = GetTotalTransferCount();
            int result = 0;
            if (recordCount % PAGE_SIZE == 0)
            {
                result = recordCount / PAGE_SIZE;
            }
            else
            {
                result = recordCount / PAGE_SIZE + 1;
            }
            return result;
        }
        #endregion    #region 取得船舶动态总条数
        /// <summary>
        /// 取得船舶动态总条数
        /// </summary>
        /// <returns>船舶动态总条数</returns>
        private int GetTotalTransferCount()
        {
            int result = 0;
            ShipStatusBLL statusBLL = new ShipStatusBLL(db);
            result = statusBLL.GetTotalCount();
            return result;
        }
        #endregion    #region 加载分页数据
        /// <summary>
        /// 加载分页数据
        /// </summary>
        private void LoadPageRecord()
        {
            ShipStatusBLL bll = new ShipStatusBLL(db);
            ArrayList alAllRecords = bll.GetAll();
            ArrayList alBind = new ArrayList();
            int startRecord = (CurrentPage - 1) * PAGE_SIZE;
            for (int i = startRecord; i < startRecord + PAGE_SIZE; i++)
            {
                if (i <= alAllRecords.Count - 1)
                {
                    alBind.Add(alAllRecords[i]);
                }
                else
                {
                    break;
                }
            }
            rpStatus.DataSource = alBind;
            rpStatus.DataBind();
        }
        #endregion    protected void lnkbtnFirst_Click(object sender, EventArgs e)
        {
            CurrentPage = 1;
            LoadPageRecord();
        }    protected void lnkbtnPrevous_Click(object sender, EventArgs e)
        {
            CurrentPage--;
            LoadPageRecord();
        }    protected void lnkbtnNext_Click(object sender, EventArgs e)
        {
            CurrentPage++;
            LoadPageRecord();
        }    protected void lnkbtnLast_Click(object sender, EventArgs e)
        {
            CurrentPage = GetPageCount();
            LoadPageRecord();
        }    protected void lnkbtnEdit_Click(object sender, EventArgs e)
        {    }    protected void lnkbtnDelete_Click(object sender, EventArgs e)
        {
            string id = (sender as LinkButton).ToolTip;
            ShipStatusBLL statusBLL = new ShipStatusBLL(db);
            if (statusBLL.Delete(id) > 0)
            {
                ReformMessage.msg("删除成功", this);
            }
            else
            {
                ReformMessage.msg("删除失败", this);
            }
            CurrentPage = 1;
            LoadPageRecord();
        }    protected void btnFind_Click(object sender, EventArgs e)
        {     }    private void BindRP()
        {
            ShipStatusBLL statusBLL = new ShipStatusBLL(db);
            ArrayList alStatus = statusBLL.GetAll();
            rpStatus.DataSource = alStatus;
            rpStatus.DataBind();
        }
        protected void rpStatus_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                ShipStatusData data = e.Item.DataItem as ShipStatusData;
                Label hlShip = e.Item.FindControl("hlShip") as Label;
                hlShip.Text = data.ShipName;
                Label lblDate = e.Item.FindControl("lblDate") as Label;
                lblDate.Text = data.StatusDate.ToShortDateString();
                HyperLink hlStatus = e.Item.FindControl("hlStatus") as HyperLink;
                if (data.Status.Length > 10)
                {
                    hlStatus.Text = data.Status.Substring(0, 10) + "...";
                }
                else
                {
                    hlStatus.Text = data.Status;
                }
                hlStatus.NavigateUrl = "DongTai_View.aspx?ID=" + data.ID.ToString();            LinkButton lnkbtnEdit = e.Item.FindControl("lnkbtnEdit") as LinkButton;
                LinkButton lnkbtnDelete = e.Item.FindControl("lnkbtnDelete") as LinkButton;
                lnkbtnEdit.PostBackUrl = "DongTai_Edit.aspx?ID=" + data.ID.ToString();
                lnkbtnDelete.ToolTip = data.ID.ToString();
                ReformMessage.isDelete(data.ShipName + "的此条船舶动态", lnkbtnDelete);
            }
            else if (e.Item.ItemType == ListItemType.Footer)
            {
                if (GetTotalTransferCount() <= PAGE_SIZE)
                {
                    foreach (Control ctl in e.Item.Controls)
                    {
                        ctl.Visible = false;
                    }
                }
                else
                {
                    Label lblTotalPage = e.Item.FindControl("lblTotalPage") as Label;
                    lblTotalPage.Text = "共 " + GetPageCount().ToString() + " 页";                if (CurrentPage == 1)
                    {
                        LinkButton lnkbtnFirst = e.Item.FindControl("lnkbtnFirst") as LinkButton;
                        LinkButton lnkbtnPrevous = e.Item.FindControl("lnkbtnPrevous") as LinkButton;
                        lnkbtnFirst.Visible = false;
                        lnkbtnPrevous.Visible = false;
                    }
                    else if (CurrentPage == GetPageCount())
                    {
                        LinkButton lnkbtnNext = e.Item.FindControl("lnkbtnNext") as LinkButton;
                        LinkButton lnkbtnLast = e.Item.FindControl("lnkbtnLast") as LinkButton;
                        lnkbtnNext.Visible = false;
                        lnkbtnLast.Visible = false;
                    }
                } // end of if (GetTotalTransferCount() <= PAGE_SIZE)
            }  //end of else if (e.Item.ItemType == ListItemType.Footer)
        }
    }
      

  2.   

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="DongTai_Manage.aspx.cs" Inherits="AOA_ChuanBo_DongTai_Manage" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>无标题页</title>
        <link href="../../App_Themes/styles.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <center>
                    <asp:Repeater ID="rpStatus" runat="server" OnItemDataBound="rpStatus_ItemDataBound">
                        <HeaderTemplate>
                            <table border="0" cellpadding="3" cellspacing="0" class="table_line_color" style="width: 500px">
                                <tr>
                                    <td class="title" colspan="5">
                                        <asp:Image ID="Image1" runat="server" ImageUrl="~/images/btn_01.gif" />&nbsp; 航标动态管理
                                        <asp:Button ID="btnAdd" runat="server" Text="点击添加" PostBackUrl="DongTai_Add.aspx" /></td>
                                </tr>
                                <%--<tr>
                                    <td class="tr1" style="width: 100px" align="left">
                                        <asp:CheckBox ID="ckbShip" runat="server" Text="船舶名称" /></td>
                                    <td class="tr1" style="width: 100px" align="left">
                                        <asp:DropDownList ID="ddlShips" runat="server">
                                        </asp:DropDownList></td>
                                    <td class="tr1" align="left" colspan="3">
                                        <asp:CheckBox ID="ckbDate" runat="server" Text="日期" />
                                        &nbsp;&nbsp;
                                        <asp:TextBox ID="TextBox1" runat="server" Width="60px"></asp:TextBox>
                                        至<asp:TextBox ID="TextBox2" runat="server" Width="60px"></asp:TextBox>
                                        <asp:Button ID="btnFind" runat="server" Text="查询" OnClick="btnFind_Click" /></td>
                                </tr>--%>
                                <tr>
                                    <td align="left" class="title" style="width: 100px">
                                        船舶名称</td>
                                    <td align="left" class="title" style="width: 100px">
                                        日期</td>
                                    <td align="left" class="title" style="width: 200px">
                                        船舶动态</td>
                                    <td align="left" class="title" style="width: 50px">
                                    </td>
                                    <td align="left" class="title" style="width: 50px">
                                    </td>
                                </tr>
                        </HeaderTemplate>
                        <ItemTemplate>
                            <tr class="tr1">
                                <td style="width: 100px" align="left">
                                    <asp:Label ID="hlShip" runat="server">[hlShip]</asp:Label></td>
                                <td style="width: 100px" align="left">
                                    <asp:Label ID="lblDate" runat="server"></asp:Label></td>
                                <td style="width: 200px" align="left">
                                    <asp:HyperLink ID="hlStatus" runat="server">hlStatus</asp:HyperLink></td>
                                <td style="width: 50px" align="left">
                                    <asp:LinkButton ID="lnkbtnEdit" runat="server" OnClick="lnkbtnEdit_Click">编辑</asp:LinkButton></td>
                                <td style="width: 50px" align="left">
                                    <asp:LinkButton ID="lnkbtnDelete" runat="server" OnClick="lnkbtnDelete_Click">删除</asp:LinkButton></td>
                            </tr>
                        </ItemTemplate>
                        <AlternatingItemTemplate>
                            <tr class="tr2">
                                <td style="width: 100px" align="left">
                                    <asp:Label ID="hlShip" runat="server">[hlShip]</asp:Label></td>
                                <td style="width: 100px" align="left">
                                    <asp:Label ID="lblDate" runat="server"></asp:Label></td>
                                <td style="width: 200px" align="left">
                                    <asp:HyperLink ID="hlStatus" runat="server">hlStatus</asp:HyperLink></td>
                                <td style="width: 50px" align="left">
                                    <asp:LinkButton ID="lnkbtnEdit" runat="server" OnClick="lnkbtnEdit_Click">编辑</asp:LinkButton></td>
                                <td style="width: 50px" align="left">
                                    <asp:LinkButton ID="lnkbtnDelete" runat="server" OnClick="lnkbtnDelete_Click">删除</asp:LinkButton></td>
                            </tr>
                        </AlternatingItemTemplate>
                        <FooterTemplate>
                            <tr>
                                <td colspan="5" align="right" class="tr1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <asp:Label ID="lblTotalPage" runat="server"></asp:Label>
                                <asp:LinkButton ID="lnkbtnFirst" runat="server" OnClick="lnkbtnFirst_Click">第一页</asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;
                                <asp:LinkButton ID="lnkbtnPrevous" runat="server" OnClick="lnkbtnPrevous_Click">上一页</asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;
                                <asp:LinkButton ID="lnkbtnNext" runat="server" OnClick="lnkbtnNext_Click">下一页</asp:LinkButton>&nbsp;&nbsp;&nbsp;&nbsp;
                                <asp:LinkButton ID="lnkbtnLast" runat="server" OnClick="lnkbtnLast_Click">最后一页</asp:LinkButton>
                                </td>
                            </tr>
                            </table>
                        </FooterTemplate>
                    </asp:Repeater>
                </center>
            </div>
        </form>
    </body>
    </html>
      

  3.   

    要三层代码第一层:
                    pweb.user.pweb_user userpassword = new pweb.user.pweb_user();
                    User user = new User();
    第二层:
     member.AddNewUser(user);
    第三层:                try
                    {
                        user.UserName = tb_username.Text.Trim();
                        user.CityID = int.Parse(ddl_city.SelectedValue);
                        user.UserPassWord = userpassword.sha1(tb_password.Text.Trim());
                        user.UserTrueName = tb_realname.Text;
                        user.CityID = int.Parse(ddl_city.SelectedValue);
                        user.UserEmail = tb_useremail.Text;
                        user.UserMobile = tb_usertelphone.Text;
                        user.UserSex = Convert.ToBoolean(int.Parse(ddl_sex.Text));
                        member.AddNewUser(user);
                        Response.Write("<script>alert('恭喜您,注册成功!');window.location.href='Login.aspx';</script>");                }                catch
                    {
                        //throw new Exception(ex.Message);
                        ShowErrMsg("该用户名已存在!");                }
      

  4.   

    想详细点的 留下Email
    我这个是分了4层的
      

  5.   

    LZ 我有个想法 说错别喷我啊
    在表做个字段用与排序 1,2,3,4...
    做个触发器 删除的时候把大于该条的 所有该字段数 -1 保证字段连贯
    我觉得取那一页 一页多少行都是表示层的事 
    在逻辑层做 返回对象组 参数为起始行 行数的接口函数
    数据访问层 也做一个 
    查询 用top 
      

  6.   

    thx 楼上的我的Mail:[email protected]最想知道的还是关于分页的处理上希望给发的代码中有有关的信息:)再次感谢
      

  7.   

    8楼的 我也想要 ^_^
    [email protected]
      

  8.   

    PetShop 4这个示例。
    研究好了,你的.NET FrameWork 2.0也差不多了
      

  9.   

    已发出去 petshop这个比较难看得懂 泛型多 新技术多 难理解
      

  10.   

    晕大了
    PetShop 分页 
    是用 
        <PetShopControl:CustomList ID="productsList" runat="server" EmptyText="No products found." OnPageIndexChanged="PageChanged" PageSize="4" RepeatColumns="2" CellPadding="16" CellSpacing="0" Width="500px">               
        </PetShopControl:CustomList>
    可是我怎么都找不到CustomList在那儿 高手指点下
      

  11.   

    简单点吧就是DAL层的一个分页的辅助类谁哪有?拿出来show show
      

  12.   

    昨天晚上想了下做了一个DAL层的辅助类,下面贴出来,欢迎大家拍砖:分页结构体     public struct Pagination
        {
            public int CurPage, PageLength;
            public string TableName, Fields, Where, KeyField;
            public bool IsDesc;        public Pagination(string _TableName, string _KeyField, string _Fields, string _Where, bool _IsDesc, int _CurPage, int _PageLength)
            {
                this.CurPage    = _CurPage;
                this.PageLength = _PageLength;
                this.TableName  = _TableName;
                this.KeyField   = _KeyField;
                this.Fields     = _Fields;
                this.Where      = _Where;
                this.IsDesc     = _IsDesc;
            }        public Pagination(string _TableName, string _KeyField, string _Fields, string _Where, int _CurPage, int _PageLength)
            {
                this.CurPage    = _CurPage;
                this.PageLength = _PageLength;
                this.TableName  = _TableName;
                this.KeyField   = _KeyField;
                this.Fields     = _Fields;
                this.Where      = _Where;
                this.IsDesc     = true;
            }
        }
    根据结构体,获得当前的分页SQL(利用Top,Max原理)     public class Common
        {
            public static string GetCmdText(Pagination P)
            {
                string sql_Data = string.Empty;            string where = " where 1=1";
                if (!string.IsNullOrEmpty(P.Where))
                    where += string.Format(" and {0}", P.Where);            string order = string.Format(" order by {0}", P.KeyField);
                if (P.IsDesc)
                    order += " desc";            if (P.CurPage == 1)
                    sql_Data = string.Format("select top {0} {1} from [{2}]{3}{4}", P.PageLength, P.Fields, P.TableName, where, order);
                else
                {
                    string temp = string.Empty;
                    int point = (P.CurPage - 1) * P.PageLength;
                    if (P.IsDesc)
                        temp = string.Format("<(select min({0}) from (select top {1} {0} from [{2}]{3}{4}) T)", P.KeyField, point, P.TableName, where, order);
                    else
                        temp = string.Format(">(select max({0}) from (select top {1} {0} from [{2}]{3}{4}) T)", P.KeyField, point, P.TableName, where, order);
                    sql_Data = string.Format("select top {0} {1} from [{2}]{3} and {4}{5}{6}", P.PageLength, P.Fields, P.TableName, where, P.KeyField, temp, order);
                }
                return sql_Data;
            }
        }
    上边为DAL层的辅助类,目的就是为了方便的写出分页代码,(主要是偷懒,嘿嘿)下面请看示例:DAL:     public class type_Trade
        {
            public DataTable GetTradePagedData(int curPage, int pageLength)
            {
                Pagination P = new Pagination("type_Trade", "typeID", "*", "", curPage, pageLength);
                string cmdText = Common.GetCmdText(P);
                return BaseHelper.ExecuteDataTable(cmdText);
            }        public int GetTradeItemCount()
            {
                string cmdText = "select Count(*) from type_Trade";
                return int.Parse(BaseHelper.ExecuteFirstCell(cmdText).ToString());
            }
        }BLL:     public class Type_Trade
        {
            private static readonly DAL.type_Trade trade = new type_Trade();        public DataTable GetTradePagedData(string curPage, out int itemCount, out int pageCount)
            {
                int pageLength = 20;
                int pageIndex = 0;
                int.TryParse(curPage, out pageIndex);
                if (pageIndex < 1)
                    pageIndex = 1;
                itemCount = trade.GetTradeItemCount();
                pageCount = (int)Math.Ceiling((decimal)itemCount / (decimal)pageLength);
                if (pageIndex > pageCount && pageCount != 0)
                    pageIndex = pageCount;
                DataTable dt = trade.GetTradePagedData(pageIndex, pageLength);
                return dt;
            }
        }然后就是UI层的调用注:代码中的BaseHelper是我自己封的访问底层。太长就不贴了
      

  13.   

    对了,suyiming的邮件昨天收到了,多谢。结贴的时候会有表现的^_^
      

  14.   

    哈哈 我喜欢LZ 用结构体合成SQL那部分
    有意思 
      

  15.   

    呵呵,共同研究。我也是被逼的,有时候给朋友做点小东西,用ACCESS,分页最头疼了,因为不能用存储过程。还贼不喜欢DataSet的Fill的那种方式,所有咯...它就出现了
      

  16.   

    LZ 我就是不满意你的_Fields 
    你把他用数组做 在合成sql的时候在加','连接起来
    类中个属性返回其数组中相应值 
    不就也能但数据载体用了
      

  17.   

    你这样也有些指责不清 
    在用之前 他已经是 带有','的 SQL 语句片断