ASP.NET - Repeater-kontrol

Repeater-kontrollen bruges til at vise gentagne elementlister, som er begrænsede til kontrol.

Bind DataSet til Repeater-kontrol

Repeater-kontrollen bruges til at vise gentagne elementlister, som er begrænsede til kontrol. Repeater-kontrollen kan bindes til database tabeller, XML-filer eller andre elementlister. Her vil vi vise, hvordan man binder en XML-fil til en Repeater-kontrol.

Vi vil bruge følgende XML-fil ("cdcatalog.xml") i eksemplet:

<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
  <titel>Empire Burlesque</titel>
  <artist>Bob Dylan</artist>
  <land>USA</land>
  <virksomhed>Columbia</virksomhed>
  <pris>10.90</pris>
  <år>1985</år>
</cd>
<cd>
  <titel>Hide your heart</titel>
  <artist>Bonnie Tyler</artist>
  <land>UK</land>
  <virksomhed>CBS Records</virksomhed>
  <pris>9.90</pris>
  <år>1988</år>
</cd>
<cd>
  <titel>Greatest Hits</titel>
  <artist>Dolly Parton</artist>
  <land>USA</land>
  <virksomhed>RCA</virksomhed>
  <pris>9.90</pris>
  <år>1982</år>
</cd>
<cd>
  <titel>Still got the blues</titel>
  <artist>Gary Moore</artist>
  <land>UK</land>
  <virksomhed>Virgin records</virksomhed>
  <pris>10.20</pris>
  <år>1990</år>
</cd>
<cd>
  <titel>Eros</titel>
  <artist>Eros Ramazzotti</artist>
  <land>EU</land>
  <virksomhed>BMG</virksomhed>
  <pris>9.90</pris>
  <år>1997</år>
</cd>
</catalog>

Se denne XML-fil:cdcatalog.xml

Først, importér navnerummet "System.Data". Vi har brug for dette navnerum til at arbejde med DataSet-objekter. Indsæt følgende instruktion i toppen af .aspx-siden:

<%@ Import Namespace="System.Data" %>

Opret derefter en DataSet til denne XML-fil og indlæs denne XML-fil i DataSet ved siden af siden laden:

<script runat="server">
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath("cdcatalog.xml"))
end if
end sub

Opret derefter en Repeater-kontrol på .aspx-siden. Indholdet i <HeaderTemplate>-elementet vises kun én gang i outputtet, mens indholdet i <ItemTemplate>-elementet gentages i overensstemmelse med "record" i DataSet, og indholdet i <FooterTemplate> vises kun én gang i outputtet:

<html>
<body>
<form runat="server">
<asp:Repeater id="cdcatalog" runat="server">
<HeaderTemplate>
...
</HeaderTemplate>
<ItemTemplate>
...
</ItemTemplate>
<FooterTemplate>
...
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>

Dernæst tilføjer vi skriptet, der kan oprette en DataSet, og binder denne mycdcatalog DataSet til Repeater-kontrollen. Vi fylder også Repeater-kontrollen med HTML-mærker og binder dataelementerne til cellerne i <ItemTemplate>-sektionen ved hjælp af <%#Container.DataItem("fieldname")%> metoden:

<%@ Import Namespace="System.Data" %>
<script runat="server">
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath("cdcatalog.xml"))
  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub
</script>
<html>
<body>
<form runat="server">
<asp:Repeater id="cdcatalog" runat="server">
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<th>Titel</th>
<th>Kunstner</th>
<th>Land</th>
<th>Firma</th>
<th>Pris</th>
<th>År</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem("title")%></td>
<td><%#Container.DataItem("artist")%></td>
<td><%#Container.DataItem("country")%></td>
<td><%#Container.DataItem("company")%></td>
<td><%#Container.DataItem("price")%></td>
<td><%#Container.DataItem("year")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>

Vis dette eksempel

Brug <AlternatingItemTemplate>

Du kan tilføje <AlternatingItemTemplate> element efter <ItemTemplate> element for at beskrive udseendet af skiftende rækker. I det følgende eksempel vises hver anden række i tabellen med en lysgrå baggrund:

<%@ Import Namespace="System.Data" %>
<script runat="server">
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath("cdcatalog.xml"))
  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub
</script>
<html>
<body>
<form runat="server">
<asp:Repeater id="cdcatalog" runat="server">
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<th>Titel</th>
<th>Kunstner</th>
<th>Land</th>
<th>Firma</th>
<th>Pris</th>
<th>År</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem("title")%></td>
<td><%#Container.DataItem("artist")%></td>
<td><%#Container.DataItem("country")%></td>
<td><%#Container.DataItem("company")%></td>
<td><%#Container.DataItem("price")%></td>
<td><%#Container.DataItem("year")%></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr bgcolor="#e8e8e8">
<td><%#Container.DataItem("title")%></td>
<td><%#Container.DataItem("artist")%></td>
<td><%#Container.DataItem("country")%></td>
<td><%#Container.DataItem("company")%></td>
<td><%#Container.DataItem("price")%></td>
<td><%#Container.DataItem("year")%></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>

Vis dette eksempel

Brug <SeparatorTemplate>

<SeparatorTemplate> element kan bruges til at beskrive separator mellem hver record. Her er et eksempel, hvor en horisontal linje indsættes mellem hver tabelrække:

<%@ Import Namespace="System.Data" %>
<script runat="server">
sub Page_Load
if Not Page.IsPostBack then
  dim mycdcatalog=New DataSet
  mycdcatalog.ReadXml(MapPath("cdcatalog.xml"))
  cdcatalog.DataSource=mycdcatalog
  cdcatalog.DataBind()
end if
end sub
</script>
<html>
<body>
<form runat="server">
<asp:Repeater id="cdcatalog" runat="server">
<HeaderTemplate>
<table border="0" width="100%">
<tr>
<th>Titel</th>
<th>Kunstner</th>
<th>Land</th>
<th>Firma</th>
<th>Pris</th>
<th>År</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem("title")%></td>
<td><%#Container.DataItem("artist")%></td>
<td><%#Container.DataItem("country")%></td>
<td><%#Container.DataItem("company")%></td>
<td><%#Container.DataItem("price")%></td>
<td><%#Container.DataItem("year")%></td>
</tr>
</ItemTemplate>
<SeparatorTemplate>
<tr>
<td colspan="6"><hr /></td>
</tr>
</SeparatorTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>

Vis dette eksempel