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&gt;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="";}

 

效果:

posted @ 2010-02-25 16:56  SmallSnail  Views(530)  Comments(0)    收藏  举报