---
title: "Repeater och dess items..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/52593-repeater-och-dess-items"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "fredrik"
published: "2002-09-08T15:08:41.000Z"
updated: "2002-09-12T07:40:34.000Z"
replies: 18
views: 378
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/52593-repeater-och-dess-items"
---

# Repeater och dess items...

## #1 — fredrik, 2002-09-08T15:08Z

Jag vill använde en repeater, men tycker att det känns "fel" att lägga logik för vilket fält som ska visas i presentations-skiktet.

Jag undrar därför om det finns något sätt att via koden styra vilket "fält" som ska visas var i "repeatern"?

Från presentationen vill jag bara styra layout, medan jag från "koden" vill styra vilka fält som ska visas var.

Permalänk: https://www.webforum.nu/p/52593

## #2 — PatrikB, 2002-09-08T21:26Z

Jepp, det går ..... men, beror på hur du kodat din "logik"

Om du har en OOP-approach så går det utmärkt:

```
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="Microsoft.Data.Odbc" %>
<script runat="server">

    ' Insert page code here
    '
    Public Sub Page_Init(sender As Object, e As EventArgs)
        
        Dim _start As New myStart()
        
        Dim n As Integer
        
        Dim repeaterList As New ArrayList()
        
        For n = 0 TO (_start.DetailList.Count - 1)
            '## -- lägg till nytt myDetail object --
            repeaterList.Add(CType(_start.DetailList(n), myDetails))
        Next n
        
        Repeater1.DataSource = repeaterList
        Repeater1.DataBind()
        
    End Sub
    
    
    
    
    
    Public Class myDetails
        
        Public DetailID As Integer
        Public DetailName As String
        
    End Class
    
    Public Class myStart
    
        Public DetailList As New ArrayList()
        
        Public Sub New()
        
            Dim myConnection As New OdbcConnection(ConfigurationSettings.AppSettings("connectionstring"))
            Dim myCommand As New OdbcCommand("SELECT myIdField, myNameField FROM myTable", myConnection)
            
            Dim dr As OdbcDataReader
            
            myConnection.Open()
            
            dr = myCommand.ExecuteReader()
            
            While dr.Read()
            
                Dim _details As New myDetails()
                
                _details.DetailID = CInt(dr("myIdField"))
                _details.DetailName = CStr(dr("myNameField"))
                
                Me.DetailList.Add(_details)
                
            End While
            
        End Sub
        
    End Class

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:Repeater id="Repeater1" runat="server" EnableViewState="False">
            <ItemTemplate>
                <a href='file.aspx?id=<%# Ctype(Container.DataItem, myDetails).DetailID %>'><%# Ctype(Container.DataItem, myDetails).DetailName %></a></br>
            </ItemTemplate>
        </asp:Repeater>
    </form>
</body>
</html>
```

Nu har du bara "teorin"/kod som du får kika igenom......men, det hela bygger på att du populerar en arraylist med ett class-object i varje index och sedan loopar ut ArrayListan i repetearn och använder sig av class-objectet (i detta fall classen myDetails) och dess egenskaper

\[redigerat\]
Du får ju lov att ändra så att sql-frågan och de olika objecten stämmer, om du kör SQL Server så får du använda SqlConnection osv. Använder själv mySQL därav odbc-managern

På detta sätt kan du ändra fält-namn.
Det man alldrig får ändra är Publica properties och methods, för då kommer ju allt att gå åt h\*\*\*\*\*e :e
\[/redigerat\]

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/778440

## #3 — fredrik, 2002-09-09T06:15Z

Tack för svaret.

Jodå, jag logiken är uppbyggd på det sättet, med (lilla) skillnaden att jag använder en "structure" ist. för en klass för den "rena" datan.

Men, jag måste ju fortfarande använda följande kod i presentationen:

> \<ItemTemplate\>
>                 \<a href='file.aspx?id=\<%# Ctype(Container.DataItem, myDetails).DetailID %\>'\>\<%# Ctype(Container.DataItem, myDetails).DetailName %\>\</a\>\</br\>
>             \</ItemTemplate\>

Går det att kod-mässigt skapa den?

Tack på förhand!

Permalänk: https://www.webforum.nu/p/778517

## #4 — NETwork, 2002-09-09T07:14Z

Om du lägger dina data i ett dataset (eller en datatable) så kan du enkelt lägga till en kolumn i denna och modifiera den så som du vill ha den. Exempelvis:

```
ds.Tables["myTable"].Columns.Add(new DataColumn("newColumn", typeof(System.String)));
for (int i=0; i<ds.Tables["myTable"].Rows.Count; i++) {
  //Logik för varje rad här, exempelvis:
  ds.Tables["myTable"].Rows[i]["newColumn"] = "blah blah";
}
```

Sedan tycker jag att det är mycket bättre att du i ditt exempel använder en linkbutton istället för att skriva ren html \<a href=...\> om du ska programmera en sådan dynamiskt.

Permalänk: https://www.webforum.nu/p/778575

## #5 — fredrik, 2002-09-09T10:15Z

Ok, får kolla vidare på det! Tack.

> Sedan tycker jag att det är mycket bättre att du i ditt exempel använder en linkbutton istället för att skriva ren html \<a href=...\> om du ska programmera en sådan dynamiskt.

Håller med, klippte bara ut PatrikB.s exempel.

Permalänk: https://www.webforum.nu/p/778663

## #6 — PatrikB, 2002-09-09T10:25Z

> Men, jag måste ju fortfarande använda följande kod i presentationen:

Varför skulle du inte vilja ha den koden i presentationen för?

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/778669

## #7 — PatrikB, 2002-09-09T10:26Z

jo, håller oxå med om det ...... nu vart det bara så att jag "hårdkodade" in en html-tag ...... :e

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/778671

## #8 — NETwork, 2002-09-09T10:40Z

> jo, håller oxå med om det ...... nu vart det bara så att jag "hårdkodade" in en html-tag ...... :e

Ajabaja...  ;)

Permalänk: https://www.webforum.nu/p/778679

## #9 — fredrik, 2002-09-09T14:36Z

> Varför skulle du inte vilja ha den koden i presentationen för?

Kan vara för att jag inte riktigt "förstår" Repeater-kontrollen till fullo...MEN då ALLT annat (typ) i .NET går att styra med objekt och kod, verkar det konstigt att det inte skulle gå med en Repeater.

Jag vill alltså kunna göra det från "code-behind".

Permalänk: https://www.webforum.nu/p/778887

## #10 — PatrikB, 2002-09-09T17:34Z

tyvärr, kan inte hjälpa dig med "code-behind" då jag inte tillämpar det eller kodar i VS.NET

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/779032

## #11 — renholm, 2002-09-10T13:17Z

Har inte fått det riktigt klart för mig vad du vill, du vill alltså kunna styra designen på presentationslagret från koden? Jag tycker det är utmärkt att styra vad som ska visas var i från pres.lagret. eftersom om du vill ändra något så slipper du compilera om.

Hoppas jag förstod rätt.

Permalänk: https://www.webforum.nu/p/779594

## #12 — fredrik, 2002-09-11T11:13Z

Jag vill kunna styra utseendet (färger, typsnitt m.m.) från presentationen, samt kunna ange vilket fält som ska visas var.

Vad som känns fel är att behöva använda "\<%# %\>" i presentationen...samt att behöva skriva: "Container.dataItem".

Codebehind, tillhör ju ändå (på sätt och vis) presentationen, då jag som logik använder "Assemblys".

Permalänk: https://www.webforum.nu/p/780469

## #13 — NETwork, 2002-09-11T12:00Z

Aha, men då kan du nog glömma att använda en Repeater. Hela presentationen ligger ju i den template som loopas för varje rad inkluderat den kod som krävs för att skriva ut dina data.

> Unlike DataList, Repeater has no built-in layout or styles. You must explicitly declare all HTML layout, formatting, and style tags within the templates of the control.

Permalänk: https://www.webforum.nu/p/780498

## #14 — fredrik, 2002-09-11T12:03Z

Tack! Då var det löst! Vet man bara att begränsningen finns, så behöver man inte fundera så värst mycket mer!

Tack för alla svar!

Permalänk: https://www.webforum.nu/p/780502

## #15 — renholm, 2002-09-11T14:06Z

Men jag ser inget fel att använda Container.DataItem. Vad är det du inte gillar med det?

Permalänk: https://www.webforum.nu/p/780596

## #16 — fredrik, 2002-09-12T06:20Z

Felet tycker jag är följande:

Tänk dig att en person jobbar med att utveckla enbart layouten för en sajt. Denna person skapar designen, samt ritar upp HTML-koden. Den enda ASP.NET kod den behöver känna till är i princip koden för olika kontroller, dock inte hur man använder dem. Typ hur man lägger upp en textbox och sätter dess ID osv.

Detta fungerar bra i alla situationer **utom** när det gäller en repeater. För då måste denna person plötsligt veta att den ska skriva "Container.DataItem" och så ett fält (som denna designer kanske inte har en aning om).

Nu så är inte fallet så med mig själv, då jag skriver både codebehind koden och gör själva "html"-layouten.

Men...scenariot skulle ju kunna finnas och därav mina funderingar...! :)

Permalänk: https://www.webforum.nu/p/780993

## #17 — PatrikB, 2002-09-12T06:36Z

Men, å andra sidan så behöver ju programmeraren helt plötsligt veta hur designen ska vara, om datalisten ska populeras horisontellt eller vertikalt m.m, m.m

Då e det ett klart bättre läge att "lära" designern (oftast inte den som gör HTML-koden) hur en repeater, eller datalist/grid funkar

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/780998

## #18 — NETwork, 2002-09-12T07:35Z

Ja, så mycket samarbete mellan designers och programmerare måste ni nog ändå ha att ni kan överbrygga det problemet. :) Alternativt att du som programmerare slänger ut en enkel repeater med de data som ska ut och sedan låter designfolk göra det riktiga layoutjobbet... jag menar, du måste ju ändå i egenskap av programmerare testa att din webbapplikation fungerar med något enkelt webbgränssnitt.

Jag gissar att framtidens designers måste veta en del om programmering, åtminstone asp.net-lagret i detta fall.

Permalänk: https://www.webforum.nu/p/781027

## #19 — fredrik, 2002-09-12T07:40Z

Japp, visst är det så...som sagt så jobbar inte vi på det sättet själva...jag bara reagerade på det för att det skulle kunna bli ett problem... 

...man måste ifrågasätta allt :)

Permalänk: https://www.webforum.nu/p/781030

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/52593-repeater-och-dess-items
