Går det att göra så att man lägger en repeater i en annan repeater?
För jag har en repeater som listar ut lite grejer ur en databas, bland annat ett ID nummer. Sedan vill jag att för varje item i den fösta repeatern så skall den även lista ut lite grejer med ID nummret som vilkor i SQLen..
altså.. så här vill jag att varje item skall se ut skall se ut
Titel 1
ID = 1
här skall det ligga en ny lista där proID = 1
Titel 2
ID = 2
här skall det ligga en ny lista där proID = 2
osv..
Javisst, det är inga problem, du kan ha kontroller i kontroller i kontroller.
Det går att lösa på många olika sätt, börja med att skapa två repeaters där den andra repeatern ligger i den första repeaterns itemtemplate. Sedan kan du exempelvis skapa en funktion med den första repeaterns id som inparameter som sedan returnerar den datakälla som ska fylla repeater nummer två.
Nåt sånt här kanske (fritt skrivet):
<asp:repeater id="R1" runat="server">
<itemtemplate>
<asp:repeater id="R2" DataSource="<%# myFunction(DataBinder.Eval(Container.DataItem, "ID")) %>" runat="server">
<itemtemplate>
</itemtemplate>
</asp:repeater>
</itemtemplate>
</asp:repeater>
//och i koden:
protected string myFunction(object ID) {
//kod här där du använder ID för att hämta data som du sedan returnerar
return myData;
}
Saken är den att jag kan bara skriva
DataSource="<%#GetUnderrubriker(4)%>"
och inte
DataSource="<%#GetUnderrubriker(Container.dataitem("ID"))%>"
eller
DataSource="<%#GetUnderrubriker(DataBinder.Eval(Container.DataItem, "ID"))%>"
den klagar bara på att container inte är deklarerad. skumt..
Jag testade även med
<%dim Id as integer
id = Container.dataitem("ID)"
%> för att sedan använda variablen ID i funktionsanropet.. även där klagar den på Container..
Det är säkert ett riktigt enkelt fel men jag hittar det iallafall inte :D
Detta var ju alltså under förutsättning att du har ett ID i den datakälla du använder för att fylla din repeater med. Du måste alltså fylla din första repeater med det id du använder för att plocka ut datakällan i din andra repeater!
Jag har ID i den databasen som jag kopplar mot den första repeatern..
skriver jag <%#Container.dataitem("ID")%> så skrivs det ut.. men jag kan inte använda det värdet i funktionen för då klagar den
The ASP.NET framework supplies a static method that evaluates late-bound data binding expressions and optionally formats the result as a string. DataBinder.Eval is convenient in that it eliminates much of the explicit casting the developer must do to coerce values to the desired data type. It is particularly useful when data binding controls within a templated list, because often both the data row and the data field must be cast.
DataBinder.Eval is simply a method with three arguments: the naming container for the data item, the data field name, and a format string. In a templated list like DataList, DataGrid, or Repeater, the naming container is always Container.DataItem. Page is another naming container that can be used with DataBinder.Eval. The format string argument is optional. If it is omitted, DataBinder.Eval returns a value of type object, as shown in the following example.
It is important to note that DataBinder.Eval can carry a noticeable performance penalty over the standard data binding syntax because it uses late-bound reflection. Use DataBinder.Eval judiciously, especially when string formatting is not required.
274 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e