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

以SQL SERVER2000自带数据库Northwind中Customers表示例.
前台aspx代以码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Repeater.aspx.cs" Inherits="Repeater" %>

<!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>Repeater控件使用</title>
    <script language="javascript" type="text/javascript">
    function Check(parentChk,ChildId)
    {
        var oElements = document.getElementsByTagName("INPUT");
        var bIsChecked = parentChk.checked;

       for(i=0; i<oElements.length;i++)
        {
            if( IsCheckBox(oElements[i]) &&
                IsMatch(oElements[i].id, ChildId))
            {
                oElements[i].checked = bIsChecked;
            }
        }
     }

    function IsMatch(id, ChildId)
    {
        var sPattern =’^Repeater1.*’+ChildId+’$';
        var oRegExp = new RegExp(sPattern);
        if(oRegExp.exec(id))
            return true;
        else
            return false;
    }

    function IsCheckBox(chk)
    {
        if(chk.type == 'checkbox') return true;
        else return false;
    }

    </script>
</head>

<body>
    <form id="form1″ runat="server">
    <div style="margin-bottom:20px;text-align:center; width:1006px;">Repeater控件使用</div>
<asp:Repeater ID="Repeater1″ runat="server">
    <%–SeparatorTemplate描述一个介于每条记录之间的分隔符–%>
    <%–<SeparatorTemplate>
        <tr>
        <td colspan="5″><hr /></td>
        </tr>
    </SeparatorTemplate>–%>

    <HeaderTemplate>
      <table border="1″ cellpadding="0″ cellspacing="0″ style="width:1006px;border-collapse:collapse; text-align:center;">
      <tr>
        <td style="background-color:#cccccc; font-weight:bold; height:25px;"><input id="chkAll" name="chkAll" runat="server" type="checkbox" onclick="Check(this,’chkItem')" title="全选" />全</td>
        <td style="background-color:#cccccc; font-weight:bold; height:25px;">View</td>
        <td style="background-color:#cccccc; font-weight:bold; height:25px;">CustomerID</td>
        <td style="background-color:#cccccc; font-weight:bold;">CompanyName</td>
        <td style="background-color:#cccccc; font-weight:bold;">ContactName</td>
        <td style="background-color:#cccccc; font-weight:bold;">ContactTitle</td>
        <td style="background-color:#cccccc; font-weight:bold;">Address</td>
      </tr>
    </HeaderTemplate>
    <ItemTemplate>
      <tr>
        <td><asp:CheckBox ID="chkItem" runat="server" /></td>
        <td><a href='<%# "View.aspx?id="+DataBinder.Eval(Container.DataItem, "CustomerID") %>' target="_blank">View</a></td>
        <td><asp:Label ID="lblID" Text='<%# DataBinder.Eval(Container.DataItem, "CustomerID")%>' runat="server"></asp:Label></td>
        <td><%# DataBinder.Eval(Container.DataItem, "CompanyName")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "ContactName")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "ContactTitle")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Address")%></td>
      </tr>
    </ItemTemplate>
    <%–AlternatingItemTemplate描述交替输出行的另一种外观–%>
    <AlternatingItemTemplate>
      <tr bgcolor="#e8e8e8″>
        <td><asp:CheckBox ID="chkItem" runat="server" /></td>
        <td><a href='<%# "View.aspx?id="+DataBinder.Eval(Container.DataItem, "CustomerID") %>' target="_blank">View</a></td>
        <td><asp:Label ID="lblID" Text='<%# DataBinder.Eval(Container.DataItem, "CustomerID")%>' runat="server"></asp:Label></td>
        <td><%# DataBinder.Eval(Container.DataItem, "CompanyName")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "ContactName")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "ContactTitle")%></td>
        <td><%# DataBinder.Eval(Container.DataItem, "Address")%></td>
      </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>
     </table>
    </FooterTemplate>
</asp:Repeater>
<div style="background-color:#dedede; width:1006px;">
    <asp:Button ID="btnDel" runat="server" Text="删除" OnClick="btnDel_Click" />
   <asp:label ID="lblCurrentPage" runat="server"></asp:label>
   <asp:HyperLink id="lnkFrist" runat="server">首页</asp:HyperLink>
   <asp:HyperLink id="lnkPrev" runat="server">上一页</asp:HyperLink>
   <asp:HyperLink id="lnkNext" runat="server">下一页</asp:HyperLink>
   <asp:HyperLink id="lnkEnd" runat="server">尾页</asp:HyperLink>
</div>
    </form>
</body>
</html>

后台CS部分代码:

using System;
using System.Data;
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;
using System.Data.SqlClient;

public partial class Repeater : System.Web.UI.Page
{
    PagedDataSource PDS = new PagedDataSource();
    private string ConnStr = ConfigurationManager.AppSettings["dbConnectionString"];
    private string strsql = "";

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!this.Page.IsPostBack)
        {
            this.bind();
        }
    }

    private void bind()
    {
        int TotalCount = 0;//总记录数
        int TotalPage = 1; //总页数

        SqlConnection conn = new SqlConnection(ConnStr);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter("select CustomerID,CompanyName,ContactName,ContactTitle,Address from Customers order by CustomerID desc", conn);
        DataSet ds = new DataSet();
        da.Fill(ds, "Customers");
        DataView dv = ds.Tables[0].DefaultView;

        TotalCount = dv.Count;
        PDS.DataSource = dv;
        conn.Close();
        PDS.AllowPaging = true;
        PDS.PageSize = 20;
        int CurPage;
        if (Request.QueryString["Page"] != null)
        CurPage=Convert.ToInt32(Request.QueryString["Page"]);
        else
        CurPage=1;

        if (TotalCount == 0)
            TotalPage = 1;
        else
        {
            if (TotalCount % PDS.PageSize == 0)
                TotalPage = TotalCount / PDS.PageSize;
            else
                TotalPage = TotalCount / PDS.PageSize + 1;
        }

        PDS.CurrentPageIndex = CurPage-1;
        lblCurrentPage.Text = "共" + TotalCount.ToString() + "条记录 当前页:" + CurPage.ToString() + "/" + TotalPage;

        lnkFrist.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=1";
        if (!PDS.IsFirstPage)
            lnkPrev.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage – 1);

        if (!PDS.IsLastPage)
            lnkNext.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(CurPage + 1);
        lnkEnd.NavigateUrl = Request.CurrentExecutionFilePath + "?Page=" + TotalPage;

        Repeater1.DataSource=PDS;
        Repeater1.DataBind();
    }

    protected void btnDel_Click(object sender, EventArgs e)
    {
        string ID = "";

        for (int i = 0; i < this.Repeater1.Items.Count; i++)
        {
            CheckBox cbox = (CheckBox)this.Repeater1.Items[i].FindControl("chkItem");
            if (cbox.Checked == true)
            {
                if (ID == "")
                {
                    ID = "'"+((Label)this.Repeater1.Items[i].FindControl("lblID")).Text+"'";
                }
                else
                {
                    ID += "," + "'" + ((Label)this.Repeater1.Items[i].FindControl("lblID")).Text + "'";
                }
            }
        }
        strsql = "delete from Customers where CustomerID in (" + ID + ")";
        try
        {
            SqlConnection conn = new SqlConnection(ConnStr);
            SqlCommand comm = new SqlCommand(strsql, conn);
            comm.Connection.Open();
            comm.ExecuteNonQuery();
            comm.Connection.Close();
            System.Web.HttpContext.Current.Response.Write("<script language=’javascript'>alert('刪除成功!');</script>");
        }
        catch (System.Data.SqlClient.SqlException E)
        {
            throw new Exception(E.Message);
        }
        finally
        {
            if (conn.State == ConnectionState.Open)
                conn.Close();
        }
        this.bind();
    }
}