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]
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.
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.
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".
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.
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.
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...! :)
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
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.