ASP.NET Tutorial/Data Binding/Repeater
Содержание
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>
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>
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>