Tjena, jag gör så här Hej. Du kan skapa en DataRelation mellan dina tabeller.Nästlade loopar
Ska bygga en sida för utskrift av artiklar. Artiklar ligger i olika katerogier. Jag har en tabell för kategorierna och en för själva artiklarna, såhär:
Kategorier
-ID
-Namn
Artiklar
-KategoriID
-ID
-blabla
Om jag vill lopa igenom alla kategorier och för varje kategori loopa ut varje artikel i den kategorin, hur ska jag lösa detta i asp.net då? Jag kan ju inte ha en repeater och sätta en datasource bara...Sv: Nästlade loopar
På aspx sidan har jag en repeater
<code>
<asp:repeater id="repater1" runat="server">
<itemtemplate>
<asp:label id="lblRubrik" text='<%# DataBinder.Eval(Container.DataItem, "rubrik") %>' runat="server" />
<my:uc1 _kategori='<%# DataBinder.Eval(Container.DataItem, "Id")%>' runat="server" id="uc1" />
</itemtemplate>
</asp:repeater>
</code>
I repeatern har jag en usercontrol
Repeatern skriver ut alla kategorier
I usercontrolen skriver jag ut alla poster som hör till kategorin
I usercontrolen har jag den här koden för att hämta värdet från repeatern
<code>
Private kategori As string = ""
Public Property _kategori() As String
Get
return kategori
End Get
Set(ByVal Value As String)
kategori = Value
End Set
End Property
</code>Sv: Nästlade loopar
Det borde du väl kunna lösa i en enkel select fråga med joins? Där du sorterar ditt resultset efter Artikel?
Detta kommer förvisso ge dig ett svar som.
KategoriID Kategori Artikel
1 Bil Saab
1 Bil Volvo
2 Sand Vitgrus
2 Sand Kattgrus
3 Film Matrix
Sedan kör du en Loop som ex bryter rad då Kategorin ändrats.
Detta är dock en enkel variant. Beror ju helt o hållet på hur flexiblet allt skall vara.
Mvh JohanSv: Nästlade loopar
<code>
DataRelation categoryRel = categoryDS.Relations.Add("Kategorier",
categoryDS.Tables["Kategorier"].Columns["ID"],
categoryDS.Tables["Artiklar"].Columns["KategoriID"]);
foreach (DataRow categoryRow in categoryDS.Tables["Kategorier"].Rows)
{
//Skriver ut Kategorinamnet
Response.Write("Kategori: " + categoryRow["Namn"]);
foreach (DataRow articleRow in categoryRow.GetChildRows(categoryRel))
//Skriver ut Artikel id
Response.Write(" Artiekelid: " + articleRow["ID"]);
}
</code>
Resultat:
Kategory: minKategori
ArtikelId: 1
ArtikelId: 2
ArtikelId: 3
....
Kategory: minKategori2
ArtikelId: 12
ArtikelId: 22
ArtikelId: 32
....
....
Detta är ett sätt att göra det på, men då använder du inte DataRepeater.
/Fredrik N