今天看了天轰穿老师的视频,搞了差不多一个下午,终于实现了repeater的手写代码绑定,实现分页和嵌套,代码天老师视频上的代码有些不同,但原理是一样的,开始的时候总是报错,查了差不多半个小时还是没找出错误,那是真的很痛苦,想放弃,但最后还是坚持下来,在经过了1个小时的挣扎,终于找到了错误,原来是自己犯的一个低级错误,把2个OleDbDataAdapter对象错写成同一个OleDbDataAdapter对象的查询结果填充到DataSet的message表跟reply表,应该分别用2个OleDbDataAdapter对象分别填充同一个DataSet的message表跟reply表才对.最后得出一点心得:搞程序一定要有坚持的恒心才行,坚持去学新的技术,坚持去找bug(一个小小的bug可能会耗掉你几天的时间), 绝不能二天打鱼,三天晒网,只有不断地坚持下去才能成功!
Default.aspx
1<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
2<%@ Import Namespace="System.Data" %>
3
4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6<html xmlns="http://www.w3.org/1999/xhtml" >
7<head runat="server">
8 <title>Untitled Page</title>
9</head>
10<body>
11 <form id="form1" runat="server">
12 <div>
13 <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
14 <HeaderTemplate>
15 <table width="500">
16 <tr style="background-color:#ccffcc;">
17 <td>
18 name
19 </td>
20 <td>
21 title
22 </td>
23 <td>
24 content
25 </td>
26 <td>
27 reply
28 </td>
29 </tr>
30 </HeaderTemplate>
31 <ItemTemplate>
32 <tr>
33 <td>
34 <a href='Default1.aspx?id=<%#Eval("id") %>'><%#Eval("name") %></a>
35 </td>
36 <td>
37 <%#Eval("title") %>
38 </td>
39 <td>
40 <%#Eval("content") %>
41 </td>
42 <td>
43 <asp:Repeater ID="Repeater2" runat="server" DataSource='<%# Eval("myrelation")%>'>
44 <ItemTemplate>
45 <%#Eval("[\"replyContent\"]") %>
46 <hr size="2pt"/>
47
48 <%--<%#DataBinder.Eval(Container.DataItem,"replyTitle") %>--%>
49 </ItemTemplate>
50 </asp:Repeater>
51 </td>
52 </tr>
53 </ItemTemplate>
54 <SeparatorTemplate>
55 <tr>
56 <td colspan="4">
57 <hr size="2pt" />
58 </td>
59 </tr>
60 </SeparatorTemplate>
61 <FooterTemplate>
62 <tr>
63 <td colspan="4" style="font-size:12pt;color:#0099ff; background-color:#e6feda;">
64 共<asp:Label ID="lblpc" runat="server" Text="Label"></asp:Label>页 当前为第<asp:Label ID="lblp"
65 runat="server" Text="Label"></asp:Label>页
66 <asp:HyperLink ID="lpfirst" runat="server">首页</asp:HyperLink>
67 <asp:HyperLink ID="lpprev" runat="server">上一页</asp:HyperLink>
68 <asp:HyperLink ID="lpnext" runat="server">下一页</asp:HyperLink>
69 <asp:HyperLink ID="lplast" runat="server">末页</asp:HyperLink>
70 </td>
71 </tr>
72 </table>
73 </FooterTemplate>
74 </asp:Repeater>
75
76
77 </div>
78 </form>
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
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;
using System.Data.OleDb;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Repeater1.DataSource = pds();//通过类PagedDataSource来实现分页,pds()方法返回一个类PagedDataSource的对象pds
Repeater1.DataBind();
}
}
private PagedDataSource pds()
{
string connectionString = "provider=microsoft.jet.oledb.4.0;data source=D:/WebSites/Repeater/App_Data/student.mdb";
OleDbConnection myConnetion = new OleDbConnection(connectionString);
OleDbDataAdapter oda = new OleDbDataAdapter("select * from message", myConnetion);
DataSet ds = new DataSet();
oda.Fill(ds, "message");
OleDbDataAdapter oda2 = new OleDbDataAdapter("select * from reply", myConnetion);
oda2.Fill(ds, "reply");
ds.Relations.Add("myrelation",ds.Tables["message"].Columns["id"],ds.Tables["reply"].Columns["id"]);//新增一个关系myrelation把表message和reply通过字段id连接起来
PagedDataSource pds=new PagedDataSource();
pds.DataSource=ds.Tables["message"].DefaultView;
pds.AllowPaging=true;//允许分页
pds.PageSize=2;//分页数
pds.CurrentPageIndex=Convert.ToInt32(Request.QueryString["page"]);//当前页CurrentPageIndex,通过获得传来的参数page来设置
return pds;
}
protected void Repeater1_ItemDataCommand(object source, RepeaterCommandEventArgs e)
{
}
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Footer)
{
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);
HyperLink lpfirst = (HyperLink)e.Item.FindControl("lpfirst");
HyperLink lpprev = (HyperLink)e.Item.FindControl("lpprev");
HyperLink lpnext = (HyperLink)e.Item.FindControl("lpnext");
HyperLink lplast = (HyperLink)e.Item.FindControl("lplast");
lpfirst.NavigateUrl = "?page=0";//向Default.aspx(就是本页)传递参数page
lplast.NavigateUrl = "?page="+(n-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);
}
}
}
}