ASP.NET Tutorial/Data Binding/Repeater

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Automatically displays all the pictures in a folder named Photos

   <source lang="csharp">

<%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Collections.Generic" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script runat="server">

   void Page_Load()
   {
       if (!Page.IsPostBack)
       {
           Repeater1.DataSource = GetPhotos();
           Repeater1.DataBind();
       }
   }
   public List<String> GetPhotos()
   {
       List<string> photos = new List<string>();
       string photoPath = MapPath("~/Photos");
       string[] files = Directory.GetFiles(photoPath);
       foreach (string photo in files)
           photos.Add("~/Photos/" + Path.GetFileName(photo));
       return photos;
   }

</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>Show Photos</title>

</head> <body>

   <form id="form1" runat="server">
   <asp:Repeater
       id="Repeater1"
       runat="server">
       <ItemTemplate>
           <asp:Image
               id="Image1"
               Width="200px"
               ImageUrl="<%# Container.DataItem %>"
               Runat="server" />
       </ItemTemplate>
   </asp:Repeater>
   </form>

</body> </html></source>


Declarative databinding is used to bind the Repeater to the SqlDataSource

   <source lang="csharp">

<%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script runat="server">

   void Page_Load()
   {
       if (!Page.IsPostBack)
       {
           DirectoryInfo dir = new DirectoryInfo(MapPath("~/Photos"));
           rptPhotos.DataSource = dir.GetFiles("*.jpg");
           rptPhotos.DataBind();
       }
   }

</script> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <script type="text/javascript">
   var photos = new Array();
   window.setInterval(showImage, 5000);
   function showImage()
   {
       if (photos.length > 0)
       {
           var index = Math.floor(Math.random() * photos.length);
           var image = document.getElementById("imgPhoto");
           image.src = photos[index];
           if (image.filters)
           {
               image.filters[0].Apply();
               image.filters[0].Play();
           }
       }
   }
   </script>
   <title>Show Repeater Photos</title>

</head> <body>

   <form id="form1" runat="server">
   <img id="imgPhoto" alt="" class="photo" />
   <script type="text/javascript">
   <asp:Repeater
       id="rptPhotos"
       Runat="server">
       <ItemTemplate>
       <%# Eval("Name", "photos.push("Photos/{0} ")") %>
       </ItemTemplate>
   </asp:Repeater>
   showImage();
   </script>
   </form>

</body> </html> File: Web.config <configuration>

 <connectionStrings>
   <add name="Products" 
        connectionString="Data Source=.\SQLEXPRESS;
        AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
 </connectionStrings>

</configuration></source>


Displaying a tab strip with the Repeater control.

   <source lang="csharp">

File: ShowSeparatorTemplate.aspx

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <style type="text/css">
   html
   {
       background-color:silver;
   }
   .content
   {
       width:600px;
       height:400px;
       padding:10px;
       border:solid 1px black;
       background-color:white;
   }
   a
   {
       color:blue;
   }
   </style>
   <title>Show SeparatorTemplate</title>

</head> <body>

   <form id="form1" runat="server">
   <asp:Repeater
       id="rptProductCategories"
       DataSourceID="srcProductCategories"
       Runat="server">
       <ItemTemplate>
       <asp:HyperLink
           id="lnkMenu"
           Text="<%#Eval("Name")%>"
           NavigateUrl="<%#Eval("Id","ShowSeparatorTemplate.aspx?id={0} ")%>"
           Runat="server" />
       </ItemTemplate>
       <SeparatorTemplate>
        | 
       </SeparatorTemplate>
   </asp:Repeater>
   <asp:Repeater
       id="rptProducts"
       DataSourceID="srcProducts"
       Runat="server">
       <HeaderTemplate>
    </HeaderTemplate> <ItemTemplate>
  • <%#Eval("Title")%>
  •        </ItemTemplate>
           <FooterTemplate>
    
       </FooterTemplate>
   </asp:Repeater>
   <asp:SqlDataSource
       id="srcProductCategories"
       ConnectionString="<%$ ConnectionStrings:Products %>"
       SelectCommand="SELECT Id, Name
           FROM ProductCategories"
       Runat="server" />
   <asp:SqlDataSource
       id="srcProducts"
       ConnectionString="<%$ ConnectionStrings:Products %>"
       SelectCommand="SELECT Title FROM Products
           WHERE CategoryId=@CategoryId"
       Runat="server">
       <SelectParameters>
       <asp:QueryStringParameter
           Name="CategoryId"
           QueryStringField="Id" />
       </SelectParameters>
   </asp:SqlDataSource>
   </form>

</body> </html></source>


Displaying Data with the Repeater Control

   <source lang="csharp">

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" > <body>

   <form id="form1" runat="server">
   <asp:Repeater
       id="rptProducts"
       DataSourceID="srcProducts"
       Runat="server">
       <ItemTemplate>

<%#Eval("Title") %>

       Directed by: <%# Eval("Director") %>
       
Box Office Totals: <%# Eval("Totals","{0:c} ") %>
       </ItemTemplate>
   </asp:Repeater>
   <asp:SqlDataSource
       id="srcProducts"
       ConnectionString="<%$ ConnectionStrings:Products %>"
       SelectCommand="SELECT Title,Director,Totals
           FROM Products"
       Runat="server" />
   </form>

</body> </html>

File: Web.config <configuration>

 <connectionStrings>
   <add name="Products" 
        connectionString="Data Source=.\SQLEXPRESS;
        AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
 </connectionStrings>

</configuration></source>


Handling Repeater Control Events

   <source lang="csharp">

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <script runat="server">

   string DataKeyName = "Id";
   Hashtable Keys
   {
       get
       {
           if (ViewState["Keys"] == null)
               ViewState["Keys"] = new Hashtable();
           return (Hashtable)ViewState["Keys"];
       }
   }
   protected void rptProducts_ItemDataBound(object sender, RepeaterItemEventArgs e)
   {
       if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType ==
         ListItemType.AlternatingItem)
       {
           Keys.Add(e.Item.ItemIndex, DataBinder.Eval(e.Item.DataItem, "Id"));
       }
   }
   protected void rptProducts_DataBinding(object sender, EventArgs e)
   {
       Keys.Clear();
   }
   protected void rptProducts_ItemCommand(object source, RepeaterCommandEventArgs e)
   {
       switch (e.rumandName)
       {
           case "Update":
               UpdateProduct(e);
               break;
           case "Insert":
               InsertProduct(e);
               break;
           case "Delete":
               DeleteProduct(e);
               break;
       }
   }
   void UpdateProduct(RepeaterCommandEventArgs e)
   {
       TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
       TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
       CheckBox chkInStock = (CheckBox)e.Item.FindControl("chkInStock");
       srcProducts.UpdateParameters["Id"].DefaultValue = Keys[e.Item.ItemIndex].ToString();
       srcProducts.UpdateParameters["Title"].DefaultValue = txtTitle.Text;
       srcProducts.UpdateParameters["Director"].DefaultValue = txtDirector.Text;
       srcProducts.UpdateParameters["InStock"].DefaultValue = chkInStock.Checked.ToString();
       srcProducts.Update();
   }
   void InsertProduct(RepeaterCommandEventArgs e)
   {
       TextBox txtTitle = (TextBox)e.Item.FindControl("txtTitle");
       TextBox txtDirector = (TextBox)e.Item.FindControl("txtDirector");
       CheckBox chkInStock = (CheckBox)e.Item.FindControl("chkInStock");
       srcProducts.InsertParameters["Title"].DefaultValue = txtTitle.Text;
       srcProducts.InsertParameters["Director"].DefaultValue = txtDirector.Text;
       srcProducts.InsertParameters["InStock"].DefaultValue = chkInStock.Checked.ToString();
       srcProducts.Insert();
   }
   void DeleteProduct(RepeaterCommandEventArgs e)
   {
       srcProducts.DeleteParameters["Id"].DefaultValue = Keys[e.Item.ItemIndex].ToString();
       srcProducts.Delete();
   }

</script> <html xmlns="http://www.w3.org/1999/xhtml" > <body>

   <form id="form1" runat="server">
   <asp:Repeater
       id="rptProducts"
       DataSourceID="srcProducts"
       Runat="server" OnItemCommand="rptProducts_ItemCommand" OnItemDataBound=
         "rptProducts_ItemDataBound" OnDataBinding="rptProducts_DataBinding">
       <HeaderTemplate>
</HeaderTemplate> <ItemTemplate> </ItemTemplate> <FooterTemplate>
Title Director In Theaters
           <asp:TextBox
               id="txtTitle"
               Text="<%#Eval("Title")%>"
               Runat="server" />
           <asp:TextBox
               id="txtDirector"
               Text="<%#Eval("Director")%>"
               Runat="server" />
           <asp:CheckBox
               id="chkInStock"
               Checked="<%#Eval("InStock")%>"
               Runat="server" />
           <asp:LinkButton
               id="lnkUpdate"
               CommandName="Update"
               Text="Update"
               Runat="server" />
            | 
           <asp:LinkButton
               id="lnkDelete"
               CommandName="Delete"
               Text="Delete"
               OnClientClick="return confirm("Are you sure?");"
               Runat="server" />
           <asp:TextBox
               id="txtTitle"
               Runat="server" />
           <asp:TextBox
               id="txtDirector"
               Runat="server" />
           <asp:CheckBox
               id="chkInStock"
               Runat="server" />
           <asp:LinkButton
               id="lnkInsert"
               CommandName="Insert"
               Text="Insert"
               Runat="server" />
       </FooterTemplate>
   </asp:Repeater>
   <asp:SqlDataSource
       id="srcProducts"
       ConnectionString="<%$ ConnectionStrings:Products %>"
       SelectCommand="SELECT Id,Title,Director,InStock
           FROM Products"
       UpdateCommand="UPDATE Products SET Title=@Title,
           Director=@Director,InStock=@InStock
           WHERE Id=@Id"
       InsertCommand="INSERT Products (Title,Director,InStock)
           VALUES (@Title,@Director,
       DeleteCommand="DELETE Products WHERE Id=@Id"
       Runat="server">
       <UpdateParameters>
           <asp:Parameter Name="Id" />
           <asp:Parameter Name="Title" />
           <asp:Parameter Name="Director" />
           <asp:Parameter Name="InStock" />
       </UpdateParameters>
       <InsertParameters>
           <asp:Parameter Name="Title" />
           <asp:Parameter Name="Director" />
           <asp:Parameter Name="InStock" />
       </InsertParameters>
       <DeleteParameters>
           <asp:Parameter Name="Id" />
       </DeleteParameters>
   </asp:SqlDataSource>
   </form>

</body> </html> File: Web.config <configuration>

 <connectionStrings>
   <add name="Products" 
        connectionString="Data Source=.\SQLEXPRESS;
        AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
 </connectionStrings>

</configuration></source>


Using Templates with the Repeater Control

   <source lang="csharp">

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"

  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <style type="text/css">
   .content
   {
       width:600px;
       border:solid 1px black;
       background-color:white;
   }
   .products
   {
       border-collapse:collapse;
   }
   .products th,.products td
   {
       padding:10px;
       border-bottom:1px solid black;
   }
   .alternating
   {
       background-color:#eeeeee;
   }
   </style>
   <title>Show Repeater Table</title>

</head> <body>

   <form id="form1" runat="server">
   <asp:Repeater
       id="rptProducts"
       DataSourceID="srcProducts"
       Runat="server">
       <HeaderTemplate>
</HeaderTemplate> <ItemTemplate> </ItemTemplate> <AlternatingItemTemplate> </AlternatingItemTemplate> <FooterTemplate>
Product Title Product Director Box Office Totals
<%#Eval("Title") %> <%#Eval("Director") %> <%#Eval("Totals","{0:c} ") %>
<%#Eval("Title") %> <%#Eval("Director") %> <%#Eval("Totals","{0:c} ") %>
       </FooterTemplate>
   </asp:Repeater>
   <asp:SqlDataSource
       id="srcProducts"
       ConnectionString="<%$ ConnectionStrings:Products %>"
       SelectCommand="SELECT Title,Director,Totals
           FROM Products"
       Runat="server" />
   </form>

</body> </html> File: Web.config <configuration>

 <connectionStrings>
   <add name="Products" 
        connectionString="Data Source=.\SQLEXPRESS;
        AttachDbFilename=|DataDirectory|MyDatabase.mdf;Integrated Security=True;User Instance=True" />
 </connectionStrings>

</configuration></source>