Repeater控件的使用

自己做一个类似gridview的数据显示控件,代码如下,方便以后回忆

ascx的文件主要代码
    <div>
        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
        <HeaderTemplate>
        <table style="background-color:Gray;width:100%; color:ThreeDface;">
        <tr>
        <td style="width:20%;" align="center">新闻标题</td><td style="width:20%;" align="center">新闻提供</td><td style="width:60%;" align="center">新闻内容</td>
        </tr>
        </table>
        </HeaderTemplate>
        <ItemTemplate>
        <table style="width:100%;">
        <tr>
        <td style="width:20%;"><%#Eval("News_Title") %></td><td style="width:20%;" align="center"><%#Eval("News_Provider") %></td><td style="width:60%;"><%#Eval("News_Contant") %></td>
        </tr>
        </table>
        </ItemTemplate>
        <SeparatorTemplate>
        <hr style="size:1px;" />
        </SeparatorTemplate>
        <AlternatingItemTemplate>
        <table style="width:100%;">
        <tr>
        <td style="width:20%;background-color:#dcdcdc;"><%#Eval("News_Title") %></td><td style="width:20%;background-color:#dcdcdc;" align="center"><%#Eval("News_Provider") %></td><td style="width:60%;background-color:#dcdcdc;"><%#Eval("News_Contant") %></td>
        </tr>
        </table>
        </AlternatingItemTemplate>
        <FooterTemplate>
        <table style="width:100%;background-color:Gray;">
        <tr>
        <td valign="middle" align="center" style="width:100%; color:ThreeDface; font-size:small;">当前为第
        <asp:Label ID="PageNow" runat="server" Text="1"></asp:Label> 页,总共
        <asp:Label ID="PageTotal" runat="server" Text="1"></asp:Label> 页
        <asp:HyperLink ID="FrPage" runat="server" Text="首页"></asp:HyperLink>
        <asp:HyperLink ID="PrPage" runat="server" Text="上一页"></asp:HyperLink>
        <asp:HyperLink ID="NePage" runat="server" Text="下一页"></asp:HyperLink>
        <asp:HyperLink ID="LaPage" runat="server" Text="末页"></asp:HyperLink>
        </td>
        </tr>
        </table>
        </FooterTemplate>
        </asp:Repeater>
   
    </div>



ascx.cs文件的主要代码

 

public partial class NewsShowTable : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Repeater1.DataSource = RepeaterBind();
            Repeater1.DataBind();
        }
    }

    private PagedDataSource RepeaterBind()
    {
        string sqlstring, TableName;
        int temp;
        sqlstring = "select News_ID,News_Title,News_Provider,News_Contant from [News] ORDER BY News_ID DESC";
        TableName = "News";
        DataSet ds = GetDataSource.FillData(sqlstring, TableName);
        PagedDataSource pds = new PagedDataSource();
        pds.DataSource = ds.Tables["News"].DefaultView;
        pds.AllowPaging = true;
        if (Request.QueryString["page"] == null)
            temp = 0;
        else temp = int.Parse(Request.QueryString["page"]);
        pds.CurrentPageIndex = temp;
        pds.PageSize = 5;
        return pds;
    }
    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Footer)
        {//判断当前项是页脚模板
            int n = RepeaterBind().PageCount;//将分页总数赋给变量n
            int i = RepeaterBind().CurrentPageIndex;//将当前分页码赋给i

            Label lblpc = (Label)e.Item.FindControl("PageTotal");
            lblpc.Text = n.ToString();
            //找到lblpc这个Label,将总页码赋给他
            Label lblp = (Label)e.Item.FindControl("PageNow");
            lblp.Text = Convert.ToString(RepeaterBind().CurrentPageIndex + 1);
            //找到lblp这个Label,将当前页码赋给他,但是注意,因为页码从0开始,这里要直观的话就得加1
            HyperLink FrPage = (HyperLink)e.Item.FindControl("FrPage");
            FrPage.NavigateUrl = "?page=0";
            HyperLink LaPage = (HyperLink)e.Item.FindControl("LaPage");
            LaPage.NavigateUrl = "?page=" + Convert.ToInt32(n - 1);
            //找到表示最前页和末页的Label,为他们的NavigateUrl属性赋为第0页和最大页码减1
            HyperLink PrPage = (HyperLink)e.Item.FindControl("PrPage");
            HyperLink NePage = (HyperLink)e.Item.FindControl("NePage");
            //找到表示上页和下页这两个控件
            if (i <= 0)
            {//如果当前页已经是第0页
                PrPage.Enabled = false;
                FrPage.Enabled = false;
                NePage.Enabled = true;
            }
            else
            {
                PrPage.NavigateUrl = "?page=" + Convert.ToInt32(i - 1);
            }
            if (i > n - 2)
            {//如果当前项已经是最末页
                NePage.Enabled = false;
                LaPage.Enabled = false;
                PrPage.Enabled = true;
            }
            else
            {
                NePage.NavigateUrl = "?page=" + Convert.ToInt32(i + 1);
            }
        }
    }

}

参考了天轰穿老师的教学资料.包括视频和代码
但是不知道如何做成可以复用的用户控件,不知道怎么动态生成所需要的列..^_^可惜
posted on 2008-01-05 22:35  Austin  阅读(747)  评论(0)    收藏  举报