Om du på enklaste sätt vill presentera t.ex. ett dataset, är det bara att koppla till repeatern.
Den går igenom hela ditt dataset och du kan enkelt formatera din utskrift. Som en enklare version av datagrid.
När du behöver skriva ut flera poster från en datakälla i listform. Till exempel så skulle alla inlägg på detta forumet kunna skrivas ut med hjälp av en repeater.
En repeater är den kontroll med minst "latmask"-egenskaper. Vill du vara lat så ska du använda en datagrid som automagiskt kan skapa kolumner för datan.
Behöver du inte skriva ut data (från exempelvis en databas) på din aspx-sida, så nej, du har ingen användning för det. Likaså är en <asp:Textbox> helt värdelös om du inte tänkt använda den. Förstår du hur jag resonerar? ;)
Personligen använder jag repeatern till allt, föredrar att själv kunna skriva html-koden.
Med andra ord finns det ingen meningsfull använding av det...
Nja.. om man inte bryr sig om prestanda och skalbarhet, så finns det ingen meningsfull användning för en repeater.
Om man däremot bry sig om prestanda och skalbarhet så är repeater i högsta grad användbar, och man inser snabbt att DataGriden har ett högst begränsat användnings område.
En repeater tillsammans med en SQLDataReader är det snabbaste (bäst ur prestandasynpunkt) sättet att presenterar data från en databas på en websida.
Med andra ord finns det ingen meningsfull använding av det...
Jaha du...intressant att höra vad du använder för att skriva ut data från en databas?
Den är väl enligt min mening lika mycket latmask som att använda tex. "SMTP"-mail klassen för att skicka mail då man kan skriva en egen TCP-klass som skickar SMTP-kommandon...Fast då bör man ju inte använda den delen av .NET heller då man kan gå direkt på win32-API.er...?
Latmaskgrej kanske var fel ord. Ledsen... Fattar dock inte varför folk tog så illa upp. Den ända personen som verka ha något vettig att säga i diskutionen är Gladh.
Men jag såg ingen mening i att använda det när det finns många andra sätt där man slipper att skriva html i koden för visa information. Jag tycker inte att man ska vara beroende av html för att kunna visa koden från en databas. Jag kan ha missförstått kommandot men det verkar som om man är beroende av HTML-kod och kan inte göra allting från code behind.
Ja jag tyckte repeter är helt meningslöst om det inte vore för prestandan som jag fick reda på senare.
Personligen använder jag mig av en table som jag fyller och sedan skickar ut.
Dock undrar jag varför en repeater är bättre för skalbarheten? Till skillnad från en table?
Beroende av html-kod är du alltid oavsett vilken kontroll du använder, det är ju html som ska ut på det ena eller det andra sättet. Ibland vill man hålla html-koden på ett minimum (du kanske bara vill lägga ut ett kommatecken utöver mellan själva datan som itereras) och då är ju repeatern perfekt. Eller om du arbetar med designers som inte kan/vill använda asp.net, de har inga problem att förstå koden i repeatern.
Exempel:
<asp:Repeater Runat="server">
<HeaderTemplate>Här kommer data: </HeaderTemplate>
<ItemTemplate><%# mina data %></ItemTemplate>
<SeparatorTemplate>, </SeparatorTemplate>
<FooterTemplate><hr></FooterTemplate>
</asp:Repeater>
Visst kan du göra samma sak code behind men jag tycker det är betydligt lättare och mer översiktligt att ha all design i just presentationslagret - speciellt om du ska modifiera, lägga till och ta bort och bygga ut presentationen lite grann, då blir det snabbt rörigt att skriva detta cb. Här behöver du heller inte komma åt din kod för att kunna förändra designen på det sätt du önskar.
Hur menar du att du skulle ha gjort ovanstående? Latmask är bra. :)
Väldigt många kontroller är till just för att man inte ska behöva uppfinna hjulet varje gång man skall presentera data på olika sätt. Se t.ex. <asp:calendar> :)
Datagrid, Datatable och repeatera är tra bra kontroller som täcker upp en stor del av att presentera data från t.ex. databas på en sida. Repeatern för de enklare presentationerna. Datatable med en standardtabell utan vidare funktioner och med mest finesser en datagrid.
Prestandan sjunker ju dock därefter.
NETwork:
Jag hade lagt allt i en table där jag hade satt cssstyle för varje cell. Och på det sättet styrt utseendet. Finns det personer sedan som inte kan asp.net, kan de sätta sig och pula med css:en. Vilket enligt min mening är det ända sättet man ska göra för att ändra utseende på html kod. Men tack för exemplet. Roligt att folk ville förklara lite mer utförligt. Jag ska ta och sätta mig in i tekniken när jag får tid och se om det är något som är värt att använda.
Låt säga att du vill byta namn på css-classen. Då måste du först programmera om och därefter kompilera om filerna, vilket får hela applikationen att starta om.
Om du lägger all html-kod i aspx-sidan så räcker det med att ändra där. Dessutom separerar du design från kod, vilket är en annan viktig del.
Pace: Varför skulle jag vilja döpa om cssklassen? Det finns inte någon anledning att döpa om css klassen i sig, kanske katalogen som den ligger i. Om man tex vill ha olika teman och skulle jag då skapa en globalvariabel som styr vilken katalog som css:et ligger i.
Genom att lägga designen i css tar jag separeringen ytterligare ett steg med att separera design från kod.
Ska man köra strickt html ska allt som har med design att göra styras via css.
Precis, jag upprepar lite av det Pace redan sagt ovan: Vad gör du (eller kanske designern som inte ens har tillgång till någon källkod) om du vill ändra lite i själva tabellen? Exempelvis lägga till en kolumn med en bild? Lägger du den i presentationslagret så kan du ändra detta i sommarstugan med notepad om du vill, presentationslagret är ju gjort för att hantera just detta på ett enkelt sätt, en av fördelarna med .net är ju just separationen av kod och layout! När jag gör layout så pillar jag ganska mycket här och där, skulle ta lååång tid om jag tvingades kompilera om allt hela tiden...
Att använda css-klasser däremot är naturligtvis helt rätt men det gör du ju i din repeater också.
Här kommer nu skapas en HTML tabel som kommer innehålla en textsträng (lblName) denna sätts i event ItemDataBound() och man kan då manupilera detta "objekt" om man vill.
På detta sätt har du avskillt HTML-koden med CodeBehind-koden och kan enkelt ändra din Tabel struktur utan att behöva gå in i din codebehind och ändra.
Dock undrar jag varför en repeater är bättre för skalbarheten? Till skillnad från en table?
Det behöver den inte vara, men betydligt bättre än en datagrid iallafall. Sedan har jag för mig att en DataBind() är snabbare än att loopa igenom alla objekt i din DataReader och själv skapa en tabell, det går ju dock att testa.
Man skall dock inte använda sig av DataContainer-objektet eftersom det använder sig av reflextion som är långsammare, all binding av data till en repeater/datagrid/datalist skall ske i ItemDataBound objektet för prestanda ökning.
Gladh: Tack för förklaringen.
Men jag tycker nog fortfarande inte att det verkar värt att använda. Känns som om att använda Table är bättre än en repeater pga att man just skriver html kod. IMO så är det bättre att låta .net generera kod åt en i stället. Men det är nog mycket en smak sak vad man gillar.
Det skulle vara intresant att se lite prestanda tester på de olika sätten.
Det kommer svar på NETworks inlägg snart...måste fixa en grej...
Ungefärligt gör jag så här...håller på att installera om min dator så jag har inte till gång till vs.net för tillfället...
Table myTable = new Table(); // dett kan vara en instans som finns på den sidan man kodar. Så den behöver inte vara med.
for(int i = 0; i < //antalrader; i++)
{
TableRow myRow = new TableRow();
TableCell myCell = new TableCell;
myCell.cssclass = "minklass";
myCell.text = //Här hämtar jag från mitt dataset.
myRow.Add(myCell);
myTable.Add(myRow);
}
Nackdelen med detta är ju att du måste kompilera om varje gång du vill ändra i tabellen.
Istället om du skulle låta repeatern göra jobbet i presentationslagret slipper du denna procedur.
265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e