我想要用aspnetpager实现类似于gridview的分页功能,只不过对象是repeater
我的前台
<asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
        <table  width="100%">
            <tr>
                <td colspan="2" class="tittle">
                <%#Eval("title")%>
                </td>
            </tr>
            <tr>
                <td class="picture">
                <img  alt="" src='<%#Eval("smallpicurl") %>'/>
                </td>
                <td align="left" valign="top" class="content">
               <a href="ifr_bztrendsdetail.aspx"><%#Eval("maincontent") %></a>
                <br />
                <span  class="more"><a href="ifr_bztrendsdetail.aspx">more</a></span>
                </td>
            </tr>
        </table>
        </ItemTemplate>
        </asp:Repeater>
<%--以下是AspNetPager部分--%>
<webdiyer:AspNetPager ID="AspNetPager1" runat="server" FirstPageText="首页" LastPageText="尾页" 
         NextPageText="下一页" PrevPageText="上一页"   AlwaysShow="true" 
            TextBeforePageIndexBox="跳转到第" TextAfterPageIndexBox="页" 
            ShowNavigationToolTip="true" NumericButtonCount="10"  SubmitButtonText="转到" 
            onpagechanged="AspNetPager1_PageChanged" 
            onpagechanging="AspNetPager1_PageChanging" PageSize="5">
        </webdiyer:AspNetPager>后台
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;public partial class Iframe_ifr_bztrends : System.Web.UI.Page
{
    public int pageindex;
    public int pagesize;
    SqlHelper sqlhelp = new SqlHelper();
    DataTable dt = new DataTable();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
             pageindex = 1;
             pagesize = 5;
            bind();
        }
        
    }
        
        public void bind()
        {
            DataSet ds=showsendnote(pagesize,pageindex);            if (ds != null)//&&ds.Tables.Count==12??
            {  
                dt = ds.Tables[0];
                int hang = dt.Rows.Count;
                AspNetPager1.PageSize = hang;
                AspNetPager1.CurrentPageIndex = pageindex;
                AspNetPager1.DataBind();
              
                this.Repeater1.DataSource = dt;
                this.Repeater1.DataBind();            }
        }    public DataSet showsendnote(int pagesize,int pageindex)
    {
    string connectionstring = ConfigurationManager.AppSettings["connectionsString"].ToString();
        SqlConnection conn = new SqlConnection(connectionstring);        SqlCommand cmd = new SqlCommand("sqlstr", conn);
        cmd.CommandType = CommandType.StoredProcedure;//指定为存储过程
        cmd.Parameters.Add("@pagesize", SqlDbType.VarChar).Value =pagesize;
        cmd.Parameters.Add("@pageindex", SqlDbType.VarChar).Value = pageindex;
        cmd.Parameters.Add("@docount", SqlDbType.VarChar).Value = 0;
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(ds);
        conn.Close();
        return ds;
    }
            protected void  AspNetPager1_PageChanged(object sender, EventArgs e)
{
}
protected void  AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
    {
    //获取新的页索引
        pageindex = e.NewPageIndex;
        bind();
}
}我的存储过程create procedure sqlstr 
(@pagesize int,
@pageindex int,
@docount bit)
asif(@docount=1)
select count(*) from bztrends where kind='bznews'
else
begin
 with temptbl as (
SELECT ROW_NUMBER() OVER (ORDER BY editime desc)AS Row, O.smallpicurl ,O. title,O.  maincontent from bztrends O  where kind='bznews')
 SELECT * FROM temptbl where Row between (@pageindex-1)*@pagesize+1 and (@pageindex-1)*@pagesize+@pagesize
end
这个存储过程是用http://www.webdiyer.com/Controls/AspNetPager/SpGenerator生成的。
我不会存储过程,详细的意思也不懂,只懂个大概的
现在的问题就是
一:能不能给我解释一下这个存储过程的意思?还有这不应该是有俩个datatable的么?因为我看到例子里面有dataset.tables[0]和dataset.table[1],一个用于aspnetpager一个用于repeater?
二:当我把docount设为1时, (cmd.Parameters.Add("@docount", SqlDbType.VarChar).Value = 0;)只有一个datatable,只有一个row,一个col 值为5,就是行数,这是对的。但是repeater没有值,也就是我这儿只有一个表。repeater就没值了
当我把docount设为0时,repeater有值,但是有一个问题,这两次aspnetpager都不能用
请各位大神看一下我这个是什么问题?aspnetpager repeater存储过程

解决方案 »

  1.   

    这个存储过程,参数docount设为1表示返回记录总数,设为0表示返回记录表。
      

  2.   

    还有你应该把PageChanging中的代码放到PageChanged中去。
      

  3.   

    一,if else 这种运算符你应该看的懂吧?
    如果参数docunt = 1 ,返回的是根据条件得到记录总量
    如果参数为0,那就是分页得到的数据了。
    其实本质上还是会执行两次。
    二,不一定要用控件实现分页的效果,你可以自己手写一个完全没有问题的。
      

  4.   

    怎么会?
    PageChanging有参数object src, Wuqi.Webdiyer.PageChangingEventArgs e
    可以获取到e.NewPageIndex而PageChanged就没有
      

  5.   

    是的,写0就得到repeater的数据了
    但是aspnetpager始终不能用
    自己写?不会啊