Repeater集成分页控件
Demo 源码: /Files/Snails/Web.rar
属性:

使用代码:
(前台)
<Snail:Repeater ID="Repeater1" runat="server" EnableViewState="false"
FiledName="id,hy_title" ShowNext="True" ShowPager="True"
TableName="hy_news" ShowNumberPager="True" WhereStr="id>5" FristPageText="[首页]"
LastPageText="[末页]" ShowFrist="True">
<ItemTemplate>
<%# Eval("id") %>-<%# Eval("hy_title") %><br />
</ItemTemplate>
</Snail:Repeater>
//后台PageLoad下:
int _cpage = 1;
if (int.TryParse(Request["page"], out _cpage))
{
_cpage = _cpage > 0 ? _cpage : 1;
Repeater1.CurrentPage = _cpage;
}
Repeater1.DataBind();
分页方法:
public DataTable GetTable()
{
DataTable dt = null;
StringBuilder strSql = new StringBuilder();
string topString = "", whereString = "", pagerwhereString = "", orderbyString = "";
if (PageSize > 0) topString = " top " + PageSize.ToString(); //pagesize为0则查找所有数据
if (!string.IsNullOrEmpty(WhereStr)) whereString = " where " + WhereStr;
if (!string.IsNullOrEmpty(OrderByFiled)) orderbyString = " order by " + OrderByFiled + " " + OrderByAsc;
strSql.Append("select ");
strSql.Append(topString);
strSql.Append(" " + FiledName + " from [" + TableName + "] ");
strSql.Append(whereString);
#region 判断分页
if (ShowPager)
{
if (CurrentPage > 1)
{
if (!string.IsNullOrEmpty(WhereStr)) strSql.Append(" and ");
else strSql.Append(" where ");
string max_or_min = "max";
string eqs = ">";
if (OrderByAsc.ToLower() == "desc")
{
max_or_min = "min";
eqs = "<";
}
//分页条件
pagerwhereString = IdName + eqs + "(select " + max_or_min + "(" + IdName + ") from (select top (" + PageSize * (CurrentPage - 1) + ") " + IdName + " from [" + TableName + "] " + whereString + " order by " + IdName + " " + OrderByAsc + " ) as m)";
strSql.Append(pagerwhereString);
}
strSql.Append(orderbyString);
string countSql = "select count(1) from [" + TableName + "] " + whereString;
Recordcount = GetDataCount(countSql);//总页数
if (CurrentPage <= (Recordcount / PageSize + 1)) //判断页码,避免页码大于总页数
dt = GetDataTable(strSql.ToString());
}
else
{
strSql.Append(orderbyString);
dt = GetDataTable(strSql.ToString());
}
#endregion
return dt;
}
生成的SQL语句
select top 10 id,hy_title from [hy_news] where id>5 and id>(select max(id) from (select top (20) id from [hy_news] where id>5 order by id asc ) as m)
这下你不会说我跑的太慢了吧。大家有更快的方法可以告之小弟一下。
写这个控件花费时间最长的一个问题:
string conn=ConfigurationManager.ConnectionStrings[_connstringStringValue].ConnectionString;
在vs中的试图状态会提示 未将对象设置引用到实例。解决方法是 将代码放进try catch中。
即:
try{string conn=ConfigurationManager.ConnectionStrings[_connstringStringValue].ConnectionString;}
catch{string conn="";}
效果:


浙公网安备 33010602011771号