ASP.NET中控件实现分页功能/Repeater控件分页

//repeate.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="repeate.aspx.cs" Inherits="repeate" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" >
        <HeaderTemplate><%-- 我是头模板--%>
        <table width="500">
        <tr style="background-color: #ccffcc;">
        <td>作者</td>
        <td>书籍</td>
        </tr>
        </HeaderTemplate>
        <ItemTemplate><%--我是项模板--%>
        <tr>
        <td><a href=‘repeate.aspx?id=<%# Eval("au_id")%>‘><%# Eval("au_lname") %></a></td>
        <td><asp:Repeater ID="Repeater2" runat="server" DataSource=‘<%# Eval("myrela") %>‘>
        <ItemTemplate>
        <%# Eval("[/"title_id/"]") %>
        </ItemTemplate>
        </asp:Repeater>
        </td>
        </tr>
        </ItemTemplate>
        <SeparatorTemplate><%--这是分隔线模板--%>
        <tr>
        <td colspan="2">
        <hr style="border-top:1pt;"/>
        </td>
        </tr>
        </SeparatorTemplate>
        <FooterTemplate><%--这是脚模板--%>
        <tr>
        <td colspan="2" style="font-size:12pt;color:#0099ff; background-color:#e6feda;">
        共<asp:Label ID="lblpc" runat="server" Text="Label"></asp:Label>页 当前为第
        <asp:Label ID="lblp" runat="server" Text="Label"></asp:Label>页
        <asp:HyperLink ID="hlfir" runat="server" Text="首页"></asp:HyperLink>
        <asp:HyperLink ID="hlp" runat="server" Text="上一页"></asp:HyperLink>
        <asp:HyperLink ID="hln" runat="server" Text="下一页"></asp:HyperLink>
        <asp:HyperLink ID="hlla" runat="server" Text="尾页"></asp:HyperLink>
         跳至第
         <asp:DropDownList ID="ddlp" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlp_SelectedIndexChanged" >
         </asp:DropDownList>页
        </td>
        </tr>
        </table>
        </FooterTemplate>
        </asp:Repeater>
         </div>
    </form>
</body>
</html> 
//repeate.aspx.cs
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class repeate : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Repeater1.DataSource = pds();
            Repeater1.DataBind();
        }
    }
    private PagedDataSource pds()
    {
        PagedDataSource pds = new PagedDataSource();
        //string connstring = ConfigurationManager.ConnectionStrings["pconn"].ConnectionString;
       // SqlConnection con = new SqlConnection(connstring);
       // DataSet ds = new DataSet();
       //SqlDataAdapter sda = new SqlDataAdapter("select * from authors",con);
       // sda.Fill(ds,"name");
       // SqlDataAdapter sda2 = new SqlDataAdapter("select * from titleauthor",con);
       // sda2.Fill(ds,"title");
       // ds.Relations.Add("myrela",ds.Tables["name"].Columns["au_id"],ds.Tables["title"].Columns["au_id"]);
       // pds.DataSource = ds.Tables["name"].DefaultView;
       //Comments类是Diary类的一对多的关联关系
       Diary Diary = session.FindObject<Diary>(CriteriaOperator.Parse("Oid=?", 1));
       pds.DataSource = Diary.Comments;
        pds.AllowPaging = true;//允许分页
        pds.PageSize = 5;//单页显示项数
        pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
        return pds;
    }
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Footer)
        {
            DropDownList ddlp = (DropDownList)e.Item.FindControl("ddlp");
            HyperLink lpfirst = (HyperLink)e.Item.FindControl("hlfir");
            HyperLink lpprev = (HyperLink)e.Item.FindControl("hlp");
            HyperLink lpnext = (HyperLink)e.Item.FindControl("hln");
            HyperLink lplast = (HyperLink)e.Item.FindControl("hlla");
            pds().CurrentPageIndex = ddlp.SelectedIndex;
            int n = Convert.ToInt32(pds().PageCount);//n为分页数
            int i = Convert.ToInt32(pds().CurrentPageIndex);//i为当前页
            Label lblpc = (Label)e.Item.FindControl("lblpc");
            lblpc.Text = n.ToString();
            Label lblp = (Label)e.Item.FindControl("lblp");
            lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);
            if (!IsPostBack)
            {
                for (int j = 0; j < n; j++)
                {
                    ddlp.Items.Add(Convert.ToString(j + 1));
                }
            }
            if (i <= 0)
            {
                lpfirst.Enabled = false;
                lpprev.Enabled = false;
                lplast.Enabled = true;
                lpnext.Enabled = true;
            }
            else
            {
                lpprev.NavigateUrl = "?page=" + (i - 1);
            }
            if (i >= n - 1)
            {
                lpfirst.Enabled = true;
                lplast.Enabled = false;
                lpnext.Enabled = false;
                lpprev.Enabled = true;
            }
            else
            {
                lpnext.NavigateUrl = "?page=" + (i + 1);
            }
            lpfirst.NavigateUrl = "?page=0";//向本页传递参数page
            lplast.NavigateUrl = "?page=" + (n - 1);
            ddlp.SelectedIndex = Convert.ToInt32(pds().CurrentPageIndex);//更新下拉列表框中的当前选中页序号
        }
    }
    protected void ddlp_SelectedIndexChanged(object sender, EventArgs e)
    {//脚模板中的下拉列表框更改时激发
        string pg=Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue)-1));//获取列表框当前选中项
        Response.Redirect("repeate.aspx?page="+pg);//页面转向
    }
}

其中发现的问题: 
因为DataSource的数据类型是List()数据集; 所以

  1. var data = new XPQuery<Diary>(session);
  2. pds.DataSource = data;

会报错:“无法计算未实现 ICollection 的数据源中的计数”;所以有两种改法 
1、

  1. var data = new XPQuery<Diary>(session).ToList();
  2. pds.DataSource = data;

2、

  1. var data = new XPCollection<Diary>(session);
  2. pds.DataSource = data;

其中XPQuery也可实现查询前几条数据;如前6条数据:

    1. var data = new XPQuery<Diary>(session).Take(6).ToList();
    2. pds.DataSource = data;
时间: 2024-12-30 02:47:06

ASP.NET中控件实现分页功能/Repeater控件分页的相关文章

ASP.Net中通过Jquery前端对Repeater控件绑定的数据进行操作

说明:由于Repeater控件是动态绑定,通过Id获取数据只能默认获取第一行: 1.对Repeater中div设置样式 2.通过$(".css").each(function(){dosome();})循环出样式为css的所有数据:比如根据不同数据值才显示不同的背景颜色: 效果: 4.如果有翻页的话,可以到后台注册一个JS函数: 前端:定义一个function 后台注册:

获取不到Repeater控件中的CheckBox选中状态

写在前面的话:在做一个项目的时候,需要使用到Repeater控件,并且在Repeater控件内放置了CheckBox控件来标志需要删除的行,选中后,在后台取到的CheckBox的值总是为false.最后发现是在PageLoad函数中没有判断是否是回发就绑定了Repeater控件的数据,那么每次进入页面CheckBox控件的值当然被刷新为false了. 前台页面: 1 <div class="contianer p10"> 2 <h3> 3 当前位置:<a

Repeater 控件的嵌套使用

Repeater 控件的嵌套使用 ItemDataBound:数据绑定的时候(正在进行时)发生,多用在Repeater控件嵌套,对子Repeater控件进行数据绑定及模板列中统计列的计算处理等事情 ItemCommand :用来响应Item模板中的控件的事件. 绑定数据时,在父Repeater的ItemDataBound事件中绑定子Repeater,在子Repeater的ItemDataBound事件中绑定孙Repeater: (外层repeater) protected void Repeat

Repeater控件使用(含删除,分页功能)

Repeater控件使用(含删除,分页功能) 摘自:http://www.cnblogs.com/alanliu/archive/2008/02/25/914779.html 前臺代碼 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Repeater.aspx.cs" Inherits="Repeater" %> <!DOCTYPE html P

ASP.NET Repeater控件实现简单分页

早上,有看MSDN,看到了 PagedDataSource 类 http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.pageddatasource(v=vs.110).aspx 想起以前Insus.NET只对Gridview和DataList控件进行自定义分页.<GridView和DataList分页组件与用户控件>http://www.cnblogs.com/insus/archive/2009/03/19/14

repeater控件自定义Url分页带参数

repeater控件的效果图如下: 该页面实现的功能如下: 1.上下分页,(也可以带首页和末页,我只是禁掉了没用) 2.根据用户输入的指定分页索引进行跳转 3.根据筛选数据的参数进行URL分页的参数传递 4.数据的导出功能 前台代码: <!--表格具体内容--> <div class="table-box"> <table> <thead> <tr> <th>编号</th> <th>姓名&l

Repeater控件的分页实现

本文讲解Repeater控件与PagedDataSource相结合实现其分页功能.PagedDataSource 类封装那些允许数据源控件(如 DataGrid.GridView)执行分页操作的属性.如果控件开发人员需对自定义数据绑定控件提供分页支持,即可使用此类. PagedDataSource 类的部分公共属性: AllowCustomPaging // 获取或设置指示是否启用自定义分页的值. AllowPaging // 获取或设置指示是否启用分页的值. Count // 获取要从数据源使

repeater控件实现分页

repeater控件实现排序的方法,今天我再向大家介绍repeater控件如何实现分页的效果. 分页分为真分页和假分页. 真分页:控件上一页需要显示多少数据,就从数据库取出并绑定多少数据,每次换页时都需要访问数据库. 假分页:从数据库一次性取出所有数据绑定到控件上,再将所有数据根据一页显示多少条而分页. 从以上二者的概念上我们可以看出,区别在于分页时从数据库读取信息的方式,真分页的效率无疑是最高的.假分页在首次页面加载的时候会比较慢(如果数据量较多). 二者其实各有各的优缺点,可根据需要来自行选

Repeater控件-实现分页(升级版)

原来已经写了一个repeater控件的分页,今天有些了一个优化的程序. 1.解决了当数据条数,小于要显示的数据条数时,出现上一页按钮和还能继续递减的问题. 2.同时,还添加了在显示数据的表中进行删除和修改数据. 3.还解决了页面间的传值问题,(当点击Edit按钮时,页面跳转到另一个界面,也就是修改信息界面,然后进行修改,修改完成后保存并返回主界面.) 以上就是,新增的内容. 下面是代码: 总计使用了两个页面,一个是显示数据的页面(Default.aspx)另一个是修改信息的页面(Edit.asp