[关闭]
@Aiti 2018-11-14T01:15:01.000000Z 字数 7765 阅读 222

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

未分类


前台代码

  1. //repeate.aspx
  2. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="repeate.aspx.cs" Inherits="repeate" %>
  3. <%@ Import Namespace="System.Data" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5. <html xmlns="http://www.w3.org/1999/xhtml" >
  6. <head runat="server">
  7. <title>无标题页</title>
  8. </head>
  9. <body>
  10. <form id="form1" runat="server">
  11. <div>
  12. <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" >
  13. <HeaderTemplate><%-- 我是头模板--%>
  14. <table width="500">
  15. <tr style="background-color: #ccffcc;">
  16. <td>作者</td>
  17. <td>书籍</td>
  18. </tr>
  19. </HeaderTemplate>
  20. <ItemTemplate><%--我是项模板--%>
  21. <tr>
  22. <td><a href='repeate.aspx?id=<%# Eval("au_id")%>'><%# Eval("au_lname") %></a></td>
  23. <td><asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Eval("myrela") %>'>
  24. <ItemTemplate>
  25. <%# Eval("[/"title_id/"]") %>
  26. </ItemTemplate>
  27. </asp:Repeater>
  28. </td>
  29. </tr>
  30. </ItemTemplate>
  31. <SeparatorTemplate><%--这是分隔线模板--%>
  32. <tr>
  33. <td colspan="2">
  34. <hr style="border-top:1pt;"/>
  35. </td>
  36. </tr>
  37. </SeparatorTemplate>
  38. <FooterTemplate><%--这是脚模板--%>
  39. <tr>
  40. <td colspan="2" style="font-size:12pt;color:#0099ff; background-color:#e6feda;">
  41. 共<asp:Label ID="lblpc" runat="server" Text="Label"></asp:Label>页 当前为第
  42. <asp:Label ID="lblp" runat="server" Text="Label"></asp:Label>页
  43. <asp:HyperLink ID="hlfir" runat="server" Text="首页"></asp:HyperLink>
  44. <asp:HyperLink ID="hlp" runat="server" Text="上一页"></asp:HyperLink>
  45. <asp:HyperLink ID="hln" runat="server" Text="下一页"></asp:HyperLink>
  46. <asp:HyperLink ID="hlla" runat="server" Text="尾页"></asp:HyperLink>
  47. 跳至第
  48. <asp:DropDownList ID="ddlp" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlp_SelectedIndexChanged" >
  49. </asp:DropDownList>页
  50. </td>
  51. </tr>
  52. </table>
  53. </FooterTemplate>
  54. </asp:Repeater>
  55. </div>
  56. </form>
  57. </body>
  58. </html>

后台代码

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Configuration;
  5. using System.Collections;
  6. using System.Web;
  7. using System.Web.Security;
  8. using System.Web.UI;
  9. using System.Web.UI.WebControls;
  10. using System.Web.UI.WebControls.WebParts;
  11. using System.Web.UI.HtmlControls;
  12. public partial class repeate : System.Web.UI.Page
  13. {
  14. protected void Page_Load(object sender, EventArgs e)
  15. {
  16. if (!IsPostBack)
  17. {
  18. Repeater1.DataSource = pds();
  19. Repeater1.DataBind();
  20. }
  21. }
  22. private PagedDataSource pds()
  23. {
  24. PagedDataSource pds = new PagedDataSource();
  25. //string connstring = ConfigurationManager.ConnectionStrings["pconn"].ConnectionString;
  26. // SqlConnection con = new SqlConnection(connstring);
  27. // DataSet ds = new DataSet();
  28. //SqlDataAdapter sda = new SqlDataAdapter("select * from authors",con);
  29. // sda.Fill(ds,"name");
  30. // SqlDataAdapter sda2 = new SqlDataAdapter("select * from titleauthor",con);
  31. // sda2.Fill(ds,"title");
  32. // ds.Relations.Add("myrela",ds.Tables["name"].Columns["au_id"],ds.Tables["title"].Columns["au_id"]);
  33. // pds.DataSource = ds.Tables["name"].DefaultView;
  34. //Comments类是Diary类的一对多的关联关系
  35. Diary Diary = session.FindObject<Diary>(CriteriaOperator.Parse("Oid=?", 1));
  36. pds.DataSource = Diary.Comments;
  37. pds.AllowPaging = true;//允许分页
  38. pds.PageSize = 5;//单页显示项数
  39. pds.CurrentPageIndex = Convert.ToInt32(Request.QueryString["page"]);
  40. return pds;
  41. }
  42. protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
  43. {
  44. if (e.Item.ItemType == ListItemType.Footer)
  45. {
  46. DropDownList ddlp = (DropDownList)e.Item.FindControl("ddlp");
  47. HyperLink lpfirst = (HyperLink)e.Item.FindControl("hlfir");
  48. HyperLink lpprev = (HyperLink)e.Item.FindControl("hlp");
  49. HyperLink lpnext = (HyperLink)e.Item.FindControl("hln");
  50. HyperLink lplast = (HyperLink)e.Item.FindControl("hlla");
  51. pds().CurrentPageIndex = ddlp.SelectedIndex;
  52. int n = Convert.ToInt32(pds().PageCount);//n为分页数
  53. int i = Convert.ToInt32(pds().CurrentPageIndex);//i为当前页
  54. Label lblpc = (Label)e.Item.FindControl("lblpc");
  55. lblpc.Text = n.ToString();
  56. Label lblp = (Label)e.Item.FindControl("lblp");
  57. lblp.Text = Convert.ToString(pds().CurrentPageIndex + 1);
  58. if (!IsPostBack)
  59. {
  60. for (int j = 0; j < n; j++)
  61. {
  62. ddlp.Items.Add(Convert.ToString(j + 1));
  63. }
  64. }
  65. if (i <= 0)
  66. {
  67. lpfirst.Enabled = false;
  68. lpprev.Enabled = false;
  69. lplast.Enabled = true;
  70. lpnext.Enabled = true;
  71. }
  72. else
  73. {
  74. lpprev.NavigateUrl = "?page=" + (i - 1);
  75. }
  76. if (i >= n - 1)
  77. {
  78. lpfirst.Enabled = true;
  79. lplast.Enabled = false;
  80. lpnext.Enabled = false;
  81. lpprev.Enabled = true;
  82. }
  83. else
  84. {
  85. lpnext.NavigateUrl = "?page=" + (i + 1);
  86. }
  87. lpfirst.NavigateUrl = "?page=0";//向本页传递参数page
  88. lplast.NavigateUrl = "?page=" + (n - 1);
  89. ddlp.SelectedIndex = Convert.ToInt32(pds().CurrentPageIndex);//更新下拉列表框中的当前选中页序号
  90. }
  91. }
  92. protected void ddlp_SelectedIndexChanged(object sender, EventArgs e)
  93. {//脚模板中的下拉列表框更改时激发
  94. string pg=Convert.ToString((Convert.ToInt32(((DropDownList)sender).SelectedValue)-1));//获取列表框当前选中项
  95. Response.Redirect("repeate.aspx?page="+pg);//页面转向
  96. }
  97. }

其中发现的问题:
因为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;

Repeater控件添加删除按钮,并确认提示框

第一种

  1. <style>
  2. .wrap-dialog {
  3. position: fixed;
  4. top: 0;
  5. left: 0;
  6. width: 100%;
  7. height: 100%;
  8. font-size: 16px;
  9. text-align: center;
  10. background-color: rgba(0, 0, 0, .4);
  11. z-index: 99999;
  12. }
  13. .dialog1 {
  14. position: relative;
  15. margin: 15% auto;
  16. width: 300px;
  17. background-color: #FFFFFF;
  18. }
  19. .dialog1 .dialog-header {
  20. height: 20px;
  21. padding: 10px;
  22. background-color: lightskyblue;
  23. }
  24. .dialog1 .dialog-body {
  25. height: 30px;
  26. padding: 20px;
  27. }
  28. .dialog1 .dialog-footer {
  29. padding: 8px;
  30. background-color: whitesmoke;
  31. }
  32. .btn {
  33. width: 70px;
  34. padding: 2px;
  35. }
  36. .hide {
  37. display: none;
  38. }
  39. .ml50 {
  40. margin-left: 50px;
  41. }
  42. </style>
  43. --------------------
  44. <script>
  45. function dialogBox(message, yesCallback, noCallback) {
  46. if (message) {
  47. $('.dialog-message').html(message);
  48. }
  49. // 显示遮罩和对话框
  50. $('.wrap-dialog').removeClass("hide");
  51. // 确定按钮
  52. $('#confirm').click(function () {
  53. $('.wrap-dialog').addClass("hide");
  54. yesCallback();
  55. });
  56. // 取消按钮
  57. $('#cancel').click(function () {
  58. $('.wrap-dialog').addClass("hide");
  59. noCallback();
  60. });
  61. }
  62. $(function () {
  63. $(".delbtn").click(function () {
  64. var that=this;
  65. dialogBox("你确认删除此条信息??",
  66. function () {
  67. var h=$(that).parent().find("div").find("a").attr("href");
  68. h=h.substring(h.indexOf('rpt'),h.lastIndexOf('e')+1);
  69. __doPostBack(h,'');
  70. },
  71. function(){
  72. }
  73. );
  74. });
  75. });
  76. </script>
  77. --------------------
  78. <div class="wrap-dialog hide">
  79. <div class="dialog1">
  80. <div class="dialog-header">
  81. <span class="dialog-title">删除确认</span>
  82. </div>
  83. <div class="dialog-body">
  84. <span class="dialog-message">你确认删除此条信息?</span>
  85. </div>
  86. <div class="dialog-footer">
  87. <input type="button" class="btn" id="confirm" value="确认" />
  88. <input type="button" class="btn ml50" id="cancel" value="取消" />
  89. </div>
  90. </div>
  91. </div>
  92. <asp:Repeater runat="server" ID="rpt" ClientIDMode="Static">
  93. <ItemTemplate>
  94. <tr>
  95. <td><a href='ViewAll.aspx?rid=<%#Eval("Oid") %>'>
  96. <%#Eval("RecordName") %> (合计:
  97. <%#Eval("Grade") %> )</a> </td>
  98. <td>
  99. <a href="javascript:void(0)" class='del delbtn'>删除</a>
  100. <div style="display:none;">
  101. <asp:LinkButton ID="btnDelete" runat="server" cssClass='del' CommandArgument='<%#Eval("Oid") %>'
  102. OnClick="Del">删除</asp:LinkButton>
  103. </div>
  104. </td>
  105. </tr>
  106. </ItemTemplate>
  107. </asp:Repeater>
  108. ----------
  109. 后台代码:
  110. public void Del(object sender, EventArgs e)
  111. {
  112. int id = Convert.ToInt32((sender as LinkButton).CommandArgument);
  113. var r = new XPCollection<CalculationReport>(session, CriteriaOperator.Parse("Oid=?", id));
  114. session.Delete(r);
  115. session.Save(r);
  116. rpt.DataSource = new XPCollection<CalculationReport>(session, CriteriaOperator.Parse("User.LoginName=?", currentUser.LoginName), new SortProperty("RecordName", DevExpress.Xpo.DB.SortingDirection.Ascending));
  117. rpt.DataBind();
  118. }

第二种

  1. <asp:Repeater runat="server" ID="rpt" ClientIDMode="Static">
  2. <ItemTemplate>
  3. <tr>
  4. <td><i class="fa fa-file" style="color:#d4cbd4;margin-right:10px;"></i></td>
  5. <td><a style="font-size:14px;color:#2599e3;" href='ViewAll.aspx?rid=<%#Eval("Oid") %>'> <%#Eval("RecordName") %> (合计:<%#Eval("Grade") %> )</a> </td>
  6. <td>
  7. <%--<asp:LinkButton ID="btnDelete" runat="server" cssClass='del' Text="删除" CommandName="delete" CommandArgument='<%#Eval("Oid") %>'>删除</asp:LinkButton>--%>
  8. <asp:LinkButton ID="btnDelete" runat="server" cssClass='del' CommandArgument='<%#Eval("Oid") %>' OnClientClick="return confirm('是否删除')" OnClick="Del" >删除</asp:LinkButton>
  9. </td>
  10. </tr>
  11. </ItemTemplate>
  12. </asp:Repeater>
  13. 后台代码与上面一致
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注