webForumDet fria alternativet

Smidigt sätt att bygga upp repeater

.NET

4 svar · 270 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hej!

Jag sitter och tänker på hur man ska lösa följande på smidigast sätt.

Jag har ett datatable som jag vill binda till en repeater, denna repeater ska ha en itemtemplateoch en alternatingitemtemplate. Repeaterna består även av en header template och footertemplate, i de två itemtemplatarna ligger info inom <tr></tr> taggar, men en <td></td> för varje kolumn jag vill skriva ut (6 stycken). Dock vill jag köra lite formateringar på viss information som ska skrivas ut i <td></td> taggarna. Dessa funktioner har jag i ett namespace som heter MainFunctions.

Jag tänkte att man skulle bygga upp tabellen och cellerna inne i repeatern med tabellkontrollen men vet inte om det är smidigast. Loopa igenom alla rader i datatablen då också.

Någon som har några synpunkter eller tipps på hur man går till väga.

Medlem sedan maj 20012 812 inlägg
#2

Vad är det för formatering du vill köra, är det utseende mässigt eller är det funktioner för beräkningar?

Jag hade nog byggt upp min repeater med <td></td> och lagt in en massa <asp:labels> som jag kan binda min kod till.
Sedan hade jag använt mig av eventet onDataItemBound() för att göra de formateringar du vill i det eventet.

På detta vis så separerar du all ASP och HTML kod, du har alltså INGEN ASP kod i repeatern utan endast server-controls.

- M

Medlem sedan dec. 19996 522 inlägg
#3

Det är bland annat datum formateringar och andra strängformateringar. Ska prova med onDataItemBound(), tack.

Medlem sedan dec. 19996 522 inlägg
#4

Gladh, menar du att jag ska ha en label kontroll i min itemtemplate typ så här

<asp:label runat="server" id="LblCity" Text='<%# DataBinder.Eval(Container.DataItem, "FaCity") %>'/>

och sedan i repeaterns OnItemDataBound anropa en funktion som formaterar mina labels, men då kan jag inte köra med latebound som ovan, eller menar du att jag ska köra formateringsfunktioner på varje labels OnDataBinding?

Hur binder jag annars datan ifrån ett datatable till en repater utan att använda latebound, nu binder jag datan i codebehind med

Dim objADB As AutoDbBuiss = New AutoDbBuiss()
RptLatestUpdates.Datasource = objADB.ListLatestFactoryUpdates
RptLatestUpdates.Databind()
objADB = Nothing

tacksam för lite vägledning, kan tyvärr inte söka informationen själv då webforum är typ den enda site jag kommer åt idag, brandväggsstrul :)

Medlem sedan maj 20012 812 inlägg
#5

Du skall skapa dina labels så här i din repeater.

<asp:Label ID="lblCity" runat="server"/>

I din onDataItemBound() så kan du komma åt din Label så här.

protected void repeater_onItemDataBound(.....){
	switch(e.Item.ItemType){
  		case ListItemType.Item:
		case ListItemType.AlternativItem:
			
			AutoDbBuiss oADB = (AutoDbBuiss) e.Item.DataItem;

			((Label)e.Item.FindControl("lblCity")).Text = FORMATERINGS_FUNKTION(oADB.FaCity);

			break;
	 }
}

Skrivet ur huvudet, så visa saker stämmer nog inte direkt, men nu vet du hur du skall göra.

Så skipa LateBinding, och kör alla Formatering in i din onItemDataBound.

- M

254 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)