急救!求解分页

gundamtw 2008-10-13 11:36:41
数据库是ACCESS的,因为第一次做这个很菜的 希望各位高手指点一二
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;

public partial class HuDong : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.LoadData(pageIndex);
this.Up.Enabled = false;

}
else
{
this.Up.Enabled = true;
if (pageIndex == pageCount)
this.Next.Enabled = false;
this.LoadData(pageIndex);
}

}


private AdoPager mm_Pager;<---这是个分页类 某位高手给的
protected AdoPager m_Pager
{
get
{
if (mm_Pager == null)
mm_Pager = new AdoPager();
return mm_Pager;
}
}

private int pageIndex = 1;
private int pageSize = 3;
private int pageCount = -1;
private int recordCount = -1;

private void LoadData(int pageIndex)
{
string strQuery = "Mes a left join Reply b on a.ID=b.MesID";
string strShow = "a.[ID],a.[Name] as AName,a.[Title] as Atitle,a.[Content] as AContent,a.[Publishdate],a.[ImageURL],b.[Name] as BName,b.[Title] as Btitle,b.[Content] as BContent,b.[Returndate]";

DataTable dt = m_Pager.ExecutePager(pageIndex, pageSize, strShow, strQuery, "", "a.[ID] desc", out pageCount, out recordCount);
this.DataList1.DataSource = dt;
this.DataList1.DataBind();
this.Label9.Text = string.Format("共{0}条记录,每页{1}条,页次{2}/{3}", recordCount, pageSize, pageIndex, pageCount);
}

protected void Next_Click(object sender, EventArgs e)
{
pageIndex++;
this.LoadData(pageIndex);
}

protected void Up_Click(object sender, EventArgs e)
{
pageIndex--;
this.LoadData(pageIndex);
}
}

我想让他页面加载时候(既第一页的时候,Up功能不可用)。然后下一页到最后一页了Next不能用,现在记录总共有2页 到第2页的时候是正常显示label9的内容 但是点了上一页 首页数就变成0了

页面上的代码是这样的:
<asp:DataList ID="DataList1" runat="server" GridLines="Vertical">
<ItemTemplate>
<table style="width: 350px; height: 147px">
<tr>
<td style="width: 60px">
<asp:Label ID="Label1" runat="server" Text='<%# Eval("AName") %>'></asp:Label></td>
<td style="width: 100px">
<asp:Label ID="Label3" runat="server" Text='<%# Eval("Atitle") %>'></asp:Label>
</td>
</tr>
<tr>
<td rowspan="2">
<asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("ImageURL") %>' /><br />
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Publishdate", "{0:d}") %>'></asp:Label></td>
<td style="width: 100px; height: 18px;">
<asp:Label ID="Label4" runat="server" Text='<%# Eval("AContent") %>'></asp:Label></td>
</tr>
<tr>
<td style="width: 100px">
<table style="width: 200px; height: 100px">
<tr>
<td style="width: 100px">
 <asp:Label ID="Label5" runat="server" Text='<%# Eval("BName") %>'></asp:Label></td>
<td style="width: 100px">
<asp:Label ID="Label7" runat="server" Text='<%# Eval("Returndate","{0:d}") %>'></asp:Label></td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="Label8" runat="server" Text='<%# Eval("BContent") %>'></asp:Label></td>
</tr>
</table>
 
</td>
</tr>
</table>
</ItemTemplate>
</asp:DataList>

...全文
150 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这个问题我以前碰到过,留下你的邮箱,我把例子发给你
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
2L那个太多了 现在没时间仔细看 急着先弄这个的

4L你说的这个AspNetPager的确很简单 也很好看 不过我下载了不知道怎么用

5L的前辈 我改了 但是到了首页下面Label9的内容还是显示当前页为0/2
protected void Up_Click(object sender, EventArgs e)
{
pageIndex--;
if(pageIndex==0)
Up.Enabled = True; this.LoadData(pageIndex);
}

Next

if(PageIndex == pageCount-1)
{
Next.Enabled = True;
}
cooolchen 2008-10-13
  • 打赏
  • 举报
回复
protected void Up_Click(object sender, EventArgs e)
{
pageIndex--;
if(pageIndex==0)
Up.Enabled = True;
this.LoadData(pageIndex);
}

Next

if(PageIndex == pageCount-1)
{
Next.Enabled = True;
}
MadWork 2008-10-13
  • 打赏
  • 举报
回复
你去用下AspNetPager更简单
cooolchen 2008-10-13
  • 打赏
  • 举报
回复
pageIndex+1,页的索引是从0开始的。
周公 2008-10-13
  • 打赏
  • 举报
回复
asp.net夜话之七:ADO.NET介绍
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。
http://blog.csdn.net/zhoufoxcn/archive/2008/10/13/3066799.aspx
里面介绍了分页原理和实现。
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
高手们都醒醒啊 救人了

在线等!!!
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
我分页的上下页显示现在都出来了 正常了

不过现在又出现个小问题再请教一下各位高手 页面显示正常显示了 然后我点击下一页也是正常显示出下一页
但是当我F5刷新页面的时候 页面重新加载 结果还把我前面点击下一页的按钮点击事件又给执行了一遍

就相当于我刷新的时候点了一下显示下一页的按钮

郁闷啊 快要走出黑暗了 各位明灯指引一下最后的方向 谢谢了
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
前面就用了个别人给的查询分页的 不过分页那里有些问题 然后又问 也有很多人给了方法 不过越看越晕 还是觉的用前面给的 就是我粘出来的代码 不然一个都用不好 几个更是没话说 第一次用这个弄分页啊 本来就很菜的
joanarc82 2008-10-13
  • 打赏
  • 举报
回复
过来看看
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
感觉acc好恶心啊 第一次用这个 真是浪费了不少时间
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
AspNetPager控件 还不回用 不清楚
还有access数据库不能用存储过程
zperson 2008-10-13
  • 打赏
  • 举报
回复
用AspNetPager控件嘛,再加以下存储过程就搞定了:
CREATE Procedure dbo.Pr_GetListByPage
@PageIndex int, --当前页码
@PageSize int --每页记录数
As
Declare @SqlStr nvarchar(4000)
If(@PageIndex=1)
Begin
Set @SqlStr = 'Select Top '+Convert(nvarchar(15),@PageSize)+' from A Order By ID DESC'
End
Else
Begin
Set @SqlStr = 'Select Top '+Convert(nvarchar(15),@PageSize)+' From A where ID Not In(Select Top '+Convert(nvarchar(15),(@PageIndex-1)*@PageSize)+' ID From A Order By ID Desc) Order By ID DESC'
End

Execute Sp_ExecuteSql @SqlStr
Set @SqlStr = 'Select Count(*) From A '
Execute Sp_ExecuteSql @SqlStr
GO
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
就我前面用的那個 有人幫我改一下嗎
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
10L謝謝 太多了 我看不太懂 不會用
ws_hgo 2008-10-13
  • 打赏
  • 举报
回复
就用我这个
狠好的
呵呵
ws_hgo 2008-10-13
  • 打赏
  • 举报
回复
 public partial class Pager : UserControl
{
int _PageSize = 30;
int _PageButtonSize = 20;

int _RecordCount = 0;
int _PageCount = 1;
int _PageGroupCount = 1;

int _CurPage = 1;
int _CurGroup = 1;
PagedDataSource _Data = new PagedDataSource();

public int PageSize
{
set
{
_PageSize = value;
computePage();
}
get
{
return _PageSize;
}
}
public int PageButtonSize
{
set
{
_PageButtonSize = value;
computePage();
}
get
{
return _PageButtonSize;
}
}
public DataView DataSource
{
set
{
_Data.DataSource = value;
computePage();
}
}
public PagedDataSource PageDataSource
{
get { return _Data; }
}
protected void Page_PreRender(object sender, System.EventArgs e)
{
string pageUrl = Regex.Replace(Request.Url.PathAndQuery, "[?|&]page=\\d+", "");
pageUrl += pageUrl.IndexOf("?") == -1 ? "?page=" : "&page=";

Panel panelContext = new Panel();
LiteralControl textTotal = new LiteralControl();
textTotal.ID = "textTotal";
textTotal.Text = string.Format("总页数:{0} 页面: {1}/{2} " , _RecordCount, _CurPage, _PageCount);
panelContext.Controls.Add(textTotal);

if ( 1 < _CurPage)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText ="上一页";
link.HRef = string.Format("{0}{1}", pageUrl ,_CurPage-1);
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl("  "));
}

if (_CurGroup > 1)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = "...";
int prePage = (_CurGroup-1) * PageButtonSize;
link.HRef = pageUrl + prePage.ToString();
panelContext.Controls.Add(link);
}

panelContext.Controls.Add(new LiteralControl("  "));

int actPage = _CurGroup * PageButtonSize;
if (actPage > _PageCount) actPage = _PageCount;

for (int i = (_CurGroup - 1) * PageButtonSize + 1; i <= actPage; i++)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = i.ToString();
link.HRef = pageUrl + i.ToString();
if (i == _CurPage)
{
link.Disabled = true;
}
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl("  "));
}
if (_CurGroup < _PageGroupCount)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = "...";
int lastPage = _CurGroup * PageButtonSize + 1;
link.HRef = pageUrl + lastPage.ToString();
panelContext.Controls.Add(link);
panelContext.Controls.Add(new LiteralControl("  "));
}
if (_PageCount > _CurPage)
{
HtmlAnchor link = new HtmlAnchor();
link.InnerText = " 下一页 ";
link.HRef = string.Format("{0}{1}", pageUrl, _CurPage +1);
panelContext.Controls.Add(link);

panelContext.Controls.Add(new LiteralControl("  "));
}
this.Controls.Add(panelContext);
}

private void computePage()
{
_RecordCount = _Data.DataSourceCount;
_CurPage = FormUtil.GetQueryInt("page");
if (_CurPage == int.MinValue)
{
_CurPage = 1;
}

_PageCount = _RecordCount / _PageSize;
if (_RecordCount % PageSize != 0 || _RecordCount == 0)
{
_PageCount += 1;
}

_PageGroupCount = _PageCount / _PageButtonSize;
if (_PageGroupCount % _PageButtonSize != 0 || _PageGroupCount == 0)
{
_PageGroupCount += 1;
}

_CurGroup = _CurPage / _PageButtonSize;
if (_CurPage % _PageButtonSize != 0 || _CurGroup == 0)
{
_CurGroup += 1;
}

_Data.AllowPaging = true;
_Data.PageSize = _PageSize;
_Data.AllowPaging = true;
_Data.CurrentPageIndex = _CurPage - 1;
}
}
CodeShow 2008-10-13
  • 打赏
  • 举报
回复
代码好多哦,我前天也在找分页的方法,找到了一个存储过程,勉强解决了,但也不知如何说起.
徒步-天下 2008-10-13
  • 打赏
  • 举报
回复
这么大篇幅看不下去
gundamtw 2008-10-13
  • 打赏
  • 举报
回复
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;

public partial class HuDong : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.LoadData(pageIndex);
this.Up.Enabled = false;

}
else
{
this.Up.Enabled = true;
this.LoadData(pageIndex);
}

}


private AdoPager mm_Pager;
protected AdoPager m_Pager
{
get
{
if (mm_Pager == null)
mm_Pager = new AdoPager();
return mm_Pager;
}
}

private int pageIndex = 1;
private int pageSize = 3;
private int pageCount = -1;
private int recordCount = -1;

private void LoadData(int pageIndex)
{
string strQuery = "Mes a left join Reply b on a.ID=b.MesID";
string strShow = "a.[ID],a.[Name] as AName,a.[Title] as Atitle,a.[Content] as AContent,a.[Publishdate],a.[ImageURL],b.[Name] as BName,b.[Title] as Btitle,b.[Content] as BContent,b.[Returndate]";

DataTable dt = m_Pager.ExecutePager(pageIndex, pageSize, strShow, strQuery, "", "a.[ID] desc", out pageCount, out recordCount);
this.DataList1.DataSource = dt;
this.DataList1.DataBind();
this.Label9.Text = string.Format("共{0}条记录,每页{1}条,页次{2}/{3}", recordCount, pageSize, pageIndex, pageCount);
}
protected void Next_Click(object sender, EventArgs e)
{
pageIndex++;
this.LoadData(pageIndex);
}

protected void Up_Click(object sender, EventArgs e)
{
pageIndex--;
this.LoadData(pageIndex);


}
}

多加了几条记录 还是和前面一样 改成这样也是就显示前2页 再回到第一页的时候pageIndex还显示0

62,046

社区成员

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

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

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

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