repeater + aspnetPage做分页的问题——非常头疼

消失的尘芥 2010-11-15 03:53:47
是用的aspnetpage做分页,但是一直没有调试出来,
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
SqlConnection conn = DB.getConnection();
conn.Open();
SqlCommand Count = new SqlCommand();
Count.Connection = conn;
Count.CommandText = "select count(*) from T_SoftDown1";
AspNetPager1.RecordCount = (int)Count.ExecuteScalar();
//Response.Write(AspNetPager1.RecordCount);
conn.Close();
BindData();
}
}
public void BindData()
{
SqlConnection conn = DB.getConnection();
string sql = "select * from T_SoftDown1 order by E_id desc";//这句在大型数据中应该用:select top查询语句
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataSet ds = new DataSet();
da.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "temptbl");
DataTable dt = ds.Tables["temptbl"];
SoftDown.DataSource=dt;
SoftDown.DataBind();
}
protected void AspNetPager1_PageChanged(object src, EventArgs e)
{
//AspNetPager1.CurrentPageIndex = e.NewPageIndex;
BindData();
}
}
其中对da.Fill(ds, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "temptbl");
不是很理解,谁能解释一下,
谁有比较好的方法也可以分享一下
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
高三石 2010-11-15
  • 打赏
  • 举报
回复
dbhelper

/// <summary>
/// 返回SqlDataReader
/// </summary>
/// <param name="procName">存储过程名称</param>
/// <param name="ps">参数</param>
/// <returns>SqlDataReader</returns>
public static SqlDataReader GetReaderProc(string procName, SqlParameter[] ps)
{
lock (obj)
{
SqlCommand cmd = Connection.CreateCommand();
cmd.CommandText = procName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(ps);
SqlDataReader sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
return sdr;
}
}



public static IList<model> GetByValue(int pageSize, int pageIndex, string sortField, int orderType, string strWhere)
{
string procName = "dividePage";
SqlParameter[] ps = {
new SqlParameter("@tblName", "tablename"),
new SqlParameter("@fldName ", sortField),//排序字段
new SqlParameter("@PageSize", pageSize),
new SqlParameter("@PageIndex", pageIndex),
new SqlParameter("@doCount", 0),
new SqlParameter("@OrderType", orderType),//排序类型
new SqlParameter("@strWhere", strWhere)
};
return GetByProc(procName, ps);
}

页面调用

this.AspNetPager1.RecordCount = plist.Count;
this.AspNetPager1.PageSize = 4;
IList<model> list = PManage.GetByValue(ProListPage.PageSize, ProListPage.CurrentPageIndex, sortField, orderType, strwhere);
this.datalist1.DataSource = list;
this.datalist1.DataBind();
高三石 2010-11-15
  • 打赏
  • 举报
回复
存储过程

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[dividePage]
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '*', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) = '''' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
if @doCount != 0
begin
if @strWhere !=''''
set @strSQL = 'select count(*) as Total from'+ ' '+ @tblName + ' where' +@strWhere
else
set @strSQL = 'select count(*) as Total from ' + @tblName
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else begin
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by '+ @fldName +' desc' --如果@OrderType不是0,就执行降序,这句很重要!
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by ' + @fldName +' asc'
end
if @PageIndex = 1
begin if @strWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ '
from '+ @tblName + ' '+ @strOrder
--如果是第一页就执行以上代码,这样会加快执行速度
end
else
begin --以下代码赋予了@strSQL以真正执行的SQL代码 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '
+ @tblName + ' where ' + @fldName + '' + @strTmp + '('+ @fldName + ')
from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + '
from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder
if @strWhere != ''''
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
end
end
print @strSQL
exec (@strSQL)

flyerwing 2010-11-15
  • 打赏
  • 举报
回复
adp.fill((AspNetPager1.currentpageindex-1)*AspNetPager1.pagesize,AspNetPager1.pagesize,"tb1_"+AspNetPager1.currentpageindex,ds);
rpt.datasource=ds[0];
rpt.databind();
大概就是那样了,
如果那啥了可以找写例子看下了.
消失的尘芥 2010-11-15
  • 打赏
  • 举报
回复
da.Fill();这句的意思是在dataset中查询一个新表然后绑定数据吗?
flyerwing 2010-11-15
  • 打赏
  • 举报
回复
protected void AspNetPager1_PageChanged(object src, EventArgs e)
{
BindData();
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
AspNetPager1.CURRENTINDEX=1;
AspNetPager1.pAGESIZE=10;
}
}
BINDdATA()
{
//取数据要是楼主不会偶可帮不了你了!
}

62,074

社区成员

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

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

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

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