uncletwo的博客园天地

成功五部曲:明确目标|详细计划|立即行动|修正行动|坚持到底 坚持就是坐下来静下心做下去[不要想着行不行,只要想着再做1秒]

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

今天看了天轰穿老师的视频,搞了差不多一个下午,终于实现了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        &nbsp;
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);
            }
         }
    }
}

posted on 2007-04-05 10:47  uncletwo  阅读(1219)  评论(0编辑  收藏  举报