首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

asp.net2.0 大家怎么做Repeater分页的

2012-01-09 
asp.net2.0 大家如何做Repeater分页的我是在表头放置了 排序按钮 做的感觉比较麻烦有代码的贴出来[解决办

asp.net2.0 大家如何做Repeater分页的
我是在表头放置了 排序按钮 做的 

感觉比较麻烦 

有代码的贴出来

[解决办法]
自己写个类从Repeat继承,然后实现分页功能即可,下面的代码是偷懒了写的,没有使用事件委托,喜欢的话可参考
===========================================
using System;
using System.Text;
using System.Collections;
using System.Web.UI.WebControls;

namespace MyWebControlLibrary
{
/// <summary>
/// 一个简单自定义控件,只在原始的Repeater控件上添加了分页功能
/// </summary>
public class CustomGrid : Repeater
{
private string emptyText;
private IList dataSource;
private int pageSize = 10;
private int itemCount;
private int currentPageIndex;
/// <summary>
/// 当前页码
/// </summary>
public int CurrentPageIndex
{
get { return currentPageIndex; }
set
{
if (value > PageCount)
{
currentPageIndex = PageCount;
}
else if (value < 1)
{
currentPageIndex = 1;
}
else
{
currentPageIndex = value;
}

}
}
/// <summary>
/// 每页显示的记录条数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
}
/// <summary>
/// 总页码
/// </summary>
public int PageCount
{
get { return (ItemCount - 1) / PageSize + 1; }
}
/// <summary>
/// 总记录条数
/// </summary>
public int ItemCount
{
get { return itemCount; }
set { itemCount = value; }
}
/// <summary>
/// 数据源
/// </summary>
public override object DataSource
{
set
{
try
{
//IList是非泛型列表,以防控件的数据源未实现ICollection接口
dataSource = (IList)value;
ItemCount = dataSource.Count;
}
catch
{
dataSource = null;
ItemCount = 0;
}
}
}
/// <summary>
/// 零记录提示字符串
/// </summary>
public string EmptyText
{
set { emptyText = value; }
}
/// <summary>
/// 加载事件,可以添加需要的处理代码,在这个例子里并未做任何处理
/// </summary>
/// <param name="e"></param>
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
/// <summary>
/// 呈现事件,实现了页码方面的链接和统计,并且简单做了格式处理
/// </summary>
/// <param name="writer"></param>
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
writer.Write("<div style=\"width:500px;border:solid 1px #444444;\">");

writer.Write("<div style=\"border-bottom:solid 1px #444444;padding:10px 0px;\">");
if (ItemCount == 0)
{
writer.Write(emptyText);
}

base.Render(writer);

writer.Write("</div>");
writer.Write("<div style=\"width:100%;padding:8px;text-align:center\">");


writer.Write("共" + ItemCount + "条记录");
writer.Write(" 第" + CurrentPageIndex + "/" + PageCount + "页");

if (CurrentPageIndex == 1)
{
writer.Write(" 首页 上一页");
}
else
{
writer.Write(" <a href=\"?page=1\">首页</a>");
writer.Write(" <a href=\"?page=" + (CurrentPageIndex - 1) + "\">上一页</a>");
}

if (CurrentPageIndex == PageCount)
{
writer.Write(" 下一页 尾页");
}
else
{
writer.Write(" <a href=\"?page=" + (CurrentPageIndex + 1) + "\">下一页</a>");
writer.Write(" <a href=\"?page=" + PageCount + "\">尾页</a>");
}
writer.Write("</div>");
writer.Write("</div>");
}
/// <summary>
/// 经过重写的数据绑定方法,通过页码筛选数据
/// </summary>
/// <param name="e"></param>
protected override void OnDataBinding(EventArgs e)
{
SetPage();

int start = (CurrentPageIndex - 1) * PageSize;
int size = Math.Min(PageSize, ItemCount - start);

IList paged = new ArrayList();

for (int i = 0; i < size; i++)
{
paged.Add(dataSource[start + i]);
}

base.DataSource = paged;

base.OnDataBinding(e);
}
/// <summary>
/// 通过地址栏参数设置页码
/// </summary>
public void SetPage()
{
string page = Context.Request["Page"];
int index = page == null ? 0 : int.Parse(page);

CurrentPageIndex = index;
}
}
}

[解决办法]
用存储过程
--存储过程
--在线留言分页
create proc MessagePaging
(
@beginid int,
@endid int
)
as
Declare @Message table 
(
RowNumber int,
id int,
CompanyName varchar(50),
Address varchar(150),
[Name] varchar(20),
Tel varchar(60),
Fax varchar(60),
Email varchar(100),
Details varchar(2000),
[Time] varchar(50),
reply varchar(200) default(null)
)
insert into @Message
select Row_Number() over (order by [Message].id),
id,CompanyName,Address,[Name],Tel,Fax,Email,Details,[Time],reply from [Message]
select rownumber,id,CompanyName,Address,[Name],Tel,Fax,Email,Details,[Time],reply from @Message where RowNumber>=@beginid and RowNumber<=@endid

[解决办法]
jf
[解决办法]
使用PageDataSource对象。DataGrid使用该对象实现翻页。

属性如下:
 PagedDataSource 类的部分公共属性:
 AllowCustomPaging 获取或设置指示是否启用自定义分页的值。 
 AllowPaging 获取或设置指示是否启用分页的值。 
 Count 获取要从数据源使用的项数。 
 CurrentPageIndex 获取或设置当前页的索引。 
 DataSource 获取或设置数据源。 
 DataSourceCount 获取数据源中的项数。 
 FirstIndexInPage 获取页中的第一个索引。 
 IsCustomPagingEnabled 获取一个值,该值指示是否启用自定义分页。 
 IsFirstPage 获取一个值,该值指示当前页是否是首页。 
 IsLastPage 获取一个值,该值指示当前页是否是最后一页。 
 IsPagingEnabled 获取一个值,该值指示是否启用分页。 
 IsReadOnly 获取一个值,该值指示数据源是否是只读的。 
 IsSynchronized 获取一个值,该值指示是否同步对数据源的访问(线程安全)。 


 PageCount 获取显示数据源中的所有项所需要的总页数。 
 PageSize 获取或设置要在单页上显示的项数。 
 VirtualCount 获取或设置在使用自定义分页时数据源中的实际项数。 

不懂可以问我,不过嘿嘿按代码行数收费哦@_@
[解决办法]

探讨
自己写个类从Repeat继承,然后实现分页功能即可,下面的代码是偷懒了写的,没有使用事件委托,喜欢的话可参考
===========================================
using System;
using System.Text;
using System.Collections;
using System.Web.UI.WebControls;

namespace MyWebControlLibrary
{
/// <summary>
/// 一个简单自定义控件,只在原始的Repeater控件上添加了分页…

[解决办法]
用存储过程分页吧。
[解决办法]
其实并不复杂,关键在于你的思路是否清晰,代码结构是否合理!

LZ恐怕在做的时候已经混乱了吧?
[解决办法]
存储过程
[解决办法]
探讨
使用PageDataSource对象。DataGrid使用该对象实现翻页。

属性如下:
PagedDataSource 类的部分公共属性:
AllowCustomPaging 获取或设置指示是否启用自定义分页的值。
AllowPaging 获取或设置指示是否启用分页的值。
Count 获取要从数据源使用的项数。
CurrentPageIndex 获取或设置当前页的索引。
DataSource 获取或设置数据源。
DataSourceCount 获取数据源中的项数。
FirstIndexInPage 获取页中的…

热点排行