Avatar billede decrypto Nybegynder
12. april 2006 - 15:12 Der er 72 kommentarer og
1 løsning

Repeater i en repeater

Er det bare mig eller er det fuldstændigt umuligt at køre repeater i en repeater.

Det er to uafhængige repeaters, der ingen relation har til hinanden. Datasource for begge er et DataSet.

Min yderste repeater virker men min inderste repeater virker ikke, når jeg så hiver den ud af den første repeater så virker den...

Det skulle da være muligt...er der nogen, der kan copy paste et eksempel ind?
Avatar billede decrypto Nybegynder
12. april 2006 - 15:17 #1
Hvis det kan hjælpe kan jeg lave en 1-til-mange relation, da man godt kan betragte den yderste repeater som en parent, der så kan have 1 til flere childrens.
Avatar billede dr_chaos Nybegynder
12. april 2006 - 17:48 #2
Du kan sagtens lave nested repeaters:
Det her er et lille eksempel på hvordan det kan gribes an:
http://www.codeproject.com/aspnet/AspNetNestedRepeaters.asp
Avatar billede decrypto Nybegynder
12. april 2006 - 22:08 #3
Har stadigvæk problemer. Det virker som om meget er lavet om i VS 2005. Jeg har stadigvæk problemer....
Avatar billede dr_chaos Nybegynder
12. april 2006 - 22:11 #4
er der nogen sammenhæng mellem de 2 repeaters ?
Avatar billede decrypto Nybegynder
12. april 2006 - 22:14 #5
Fx. kan jeg slet ikke tilgå min nested repeater i min main repeaters ItemDataBound event.

Udover dette kan jeg se at i alle eksempler, der er ItemDataBound eventen private, men jeg har været nøsaget til at gøre den public, da jeg ellers får en fejl, om at jeg ikke kan tilgå min event metode pga. protection level.
Avatar billede decrypto Nybegynder
12. april 2006 - 22:15 #6
Ja, der er faktisk en sammenhæng.
Avatar billede dr_chaos Nybegynder
12. april 2006 - 22:20 #7
hvordan er sammenhængen?
Avatar billede decrypto Nybegynder
12. april 2006 - 22:23 #8
Forestil dig at hver produktgruppe har flere varer. Men mit dataset har alle varer, med deres respektive produktgruppe navn. DVS. produktgruppe navnet bliver tildels gentaget i mit dataset, indtil nyt produktgruppe med dens varer.
Avatar billede decrypto Nybegynder
12. april 2006 - 23:22 #9
Og hvorfor kan jeg ikke gøre følgende:

<asp:TextBox ID='FieldID_<%# Eval("SchemaFieldID")%>' cssClass="NumericField" runat="server"></asp:TextBox>
Avatar billede decrypto Nybegynder
12. april 2006 - 23:23 #10
Jeg får at vide at 'FieldID_<%# Eval("SchemaFieldID")%>' ikke er en valid identifier, men den vil jeg jo lave dynamisk....
Avatar billede decrypto Nybegynder
12. april 2006 - 23:37 #11
Okay glem <asp:TextBox> delen....

Jeg har nu afgjort at jeg skal have to stk dataset med relation imellem, så jeg kan lave nested repeaters.

Hvis mit dataset fx. har nogle produktgrupper:

Video
DVD
TV

og jeg har et andet dataset, der har en hel masse varer som:
Video1, Video2, Video3, DVD1, DVD2, TV1, TV2, TV3, TB4

Jeg vil have en relation imellem dem, så jeg kan lave en parent repeater, der giver lister produktgrupper, og for hver produktgruppe skal varerne til den aktuelle produktgruppe listes.

Det må da kunne lade sig gøre.....er der nogen der kan hjælpe???
Avatar billede dr_chaos Nybegynder
13. april 2006 - 09:25 #12
ja det kan det også.
Vil du bruge sqldatasources eller vil du databinde i codebehing ?
Avatar billede decrypto Nybegynder
13. april 2006 - 11:14 #13
Jeg skal databinde i codebehind. Men for at spice det yderligere har jeg i virkeligheden 3 repeaters.

Lad os bare kalde den yderste mærke. Så relationerne bliver:
Mærke(Brand)->Produktgruppe->Varer.

Som jeg har fortalt tidligere så har jeg et stort dataset, jeg bliver nødt til at 'klippe' op i et nyt dataset, så jeg får disse tre datatabeller i det nye dataset.
Avatar billede decrypto Nybegynder
13. april 2006 - 11:39 #14
Hvordan forbinder jeg relationerne? Skal jeg have tabellerne fyldt med fx

BrandDataTable med to kolonner
[Brand] [ProductGroup]
Brand1  ProductGroup1
Brand2  ProductGroup1
Brand3  ProductGroup2
Brand4  ProductGroup3
Brand5  ProductGroup3
Brand6  ProductGroup4


Og så min ProductGroup datatable
[ProductGroup] [Product]
ProductGroup1  Product1
ProductGroup2  Product2
ProductGroup3  Product3
ProductGroup3  Product4
ProductGroup4  Product5
Avatar billede decrypto Nybegynder
13. april 2006 - 11:39 #15
Forbinder jeg dem vha. teksterne der er redundante i mine datatables?
Avatar billede decrypto Nybegynder
13. april 2006 - 11:40 #16
Den sidste datatable indeholder detaljer omkring varerne(products), som jeg har undladt at 'tegne' ind her.
Avatar billede decrypto Nybegynder
13. april 2006 - 11:44 #17
Jeg tror mine illustrationer er lavet lidt for hurtigt...Der er selvfølgelig 1-til-mange relation mellem Brand->ProductGroup->Product. Men det er oprettelsen af relatonene jeg er interesseret i. I mit dataset har jeg ingen nøgler, så de må forbindes på teksterne der er redundante, ikk?
Avatar billede dr_chaos Nybegynder
13. april 2006 - 11:58 #18
her er et eksempel på hvordan du opretter relationer:
ds.Relations.Add("navn", ds.Tables["tabel1"].Columns["col1"], ds.Tables["tabel2"].Columns["col2"]);
Avatar billede decrypto Nybegynder
13. april 2006 - 12:02 #19
hmmm ok, jeg synes også jeg fandt et eksempel på nettet, der minder om dette. Så du opretter relationen på de to tabeller på "col1" og på "col2", "navn" er vel navnet på relationen.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 12:10 #20
ja
Avatar billede decrypto Nybegynder
13. april 2006 - 12:19 #21
Det viser sig at jeg har lavet tre DataTabeller uafhængigt. Ved du hvordan jeg 'registrer' dem i et nyt DataSet?
Avatar billede decrypto Nybegynder
13. april 2006 - 12:19 #22
Som du kan se har jeg ikke leget så meget med datasets :O)
Avatar billede decrypto Nybegynder
13. april 2006 - 12:23 #23
Ahhh...

/*New DataSet*/
DataSet ds = new DataSet();
ds.Tables.Add(DataTable1);
ds.Tables.Add(DataTable2);
ds.Tables.Add(DataTable3);
Avatar billede decrypto Nybegynder
13. april 2006 - 12:23 #24
hmm der er noget galt...
Avatar billede decrypto Nybegynder
13. april 2006 - 12:24 #25
15 point var måske lidt i underkanten, måske skulle jeg hæve pointne...
Avatar billede dr_chaos Nybegynder
13. april 2006 - 12:28 #26
ikke nogen dårlig ide.
Hvad er du nået til nu ?
Avatar billede decrypto Nybegynder
13. april 2006 - 12:31 #27
Der er problemer... det går fint med at 'registrere' den første DataTable, men med den anden får jeg en -> A DataTable named 'SchemaField' already belongs to this DataSet. Men 'SchemaField' er navnet på mit typed DataSet som jeg jo har klippet op i tre nye DataTables.

Kan det tænktes at når jeg 'kopierer' data fra mit Typed DS til nye DataTables, så arver de stadigvæk navnet på dataset fra mit typed dataset.
Avatar billede decrypto Nybegynder
13. april 2006 - 12:33 #28
Skal jeg måske starte med at lave mit DataSet. Definere hvilke nye DataTables de indeholder, og derefter arbejde med at 'klippe' mit Typed DS op og kopiere data forskellige steder ind i de nye DataTables...
Avatar billede dr_chaos Nybegynder
13. april 2006 - 12:34 #29
ja.
Kan du ikke bare bruge dit typed dataset ?
Avatar billede decrypto Nybegynder
13. april 2006 - 12:36 #30
Det hjalp at ændre på rækkefølgen, så jeg laver min

DataSet ds = new DataSet();
ds.Tables.Add(DataTable1);
ds.Tables.Add(DataTable2);
ds.Tables.Add(DataTable3);

Før jeg fylder dem i med data. Prøver lige at tjekke om der er data i...
Avatar billede decrypto Nybegynder
13. april 2006 - 12:38 #31
Jo, men mit Typed DS indeholder det hele, måske skulle jeg ha' klippet det op i flere tabeller med relationer fra starten, men det kræver en mere omfattende manøvre nu. Så jeg prøver lige det her...og tager ved lære af min fejl til senere forbedring :-)
Avatar billede decrypto Nybegynder
13. april 2006 - 12:41 #32
Ville det ellers være lettere at arbejde med repeaters op ad et Typed DS, der allerede er splittet op i de rigtige tabeller med relationer?
Avatar billede dr_chaos Nybegynder
13. april 2006 - 12:43 #33
ja det vil jeg mene
Avatar billede decrypto Nybegynder
13. april 2006 - 12:45 #34
Ved du hvad man kan bruge TableNamespace til?
Avatar billede decrypto Nybegynder
13. april 2006 - 12:50 #35
For der ligger godt nok data i mine tre datatables i mit ds DataSet, men når jeg kigger i den nye DataSet visualizer i VS 2005, så kan jeg se at under Table står der stadigvæk 'SchemaField', som jeg jo gerne vil have ændre.

Måske betyder det ikke noget, hvis jeg stadigvæk kan oprette relationer med fx:
ds.Relations.Add("Brand_ProdGrp", ds.Tables["SchemaField"].Columns["Brand"], ds.Tables["SchemaField"].Columns["ProductGroup"]);???

Vent er det ikke forkert??? Det burde jo være...
ds.Relations.Add("Brand_ProdGrp", ds.Tables[DataTable1].Columns["Brand"], ds.Tables[DataTable2].Columns["Brand"]);???
Avatar billede decrypto Nybegynder
13. april 2006 - 12:59 #36
Ahhh jeg skal bare give mine tabeller navne, når jeg opretter dem....
Avatar billede dr_chaos Nybegynder
13. april 2006 - 12:59 #37
jeps.
Avatar billede decrypto Nybegynder
13. april 2006 - 13:14 #38
hmmm, men så behøver jeg ikke lave de der...
ds.Tables.Add(DataTable1);
ds.Tables.Add(DataTable2);
ds.Tables.Add(DataTable3);

Da jeg har udskiftet dem med:

DataTable productLineTable = new DataTable("BrandTable");
DataTable initiativeTable = new DataTable("ProductGroupTable");
DataTable schemaFieldTable = new DataTable("ProductTable");

Men nu har jeg et andet problem, når jeg forsøger at fylde data i dem hentet fra mit Typed DataSet... måske kan du hjælpe igen....
Avatar billede decrypto Nybegynder
13. april 2006 - 13:20 #39
Jeg gør fx:

// På mit Typed DS laver jeg et view
DataView view = schemaFieldBE.SchemaField.DefaultView;

//Laver en kolonne som heddder BrandName
ds.Tables["BrandTable"].Columns.Add(new DataColumn("BrandName", typeof(string)));

//Fylder tabellen med data, hvor jeg laver en distinct true på brandname
ds.Tables["BrandTable"] = view.ToTable(true, new string[] { "BrandName" });

Men jeg får en:
Property or indexer 'System.Data.DataTableCollection.this[string]' cannot be assigned to -- it is read only på denne linje->
ds.Tables["BrandTable"] = view.ToTable(true, new string[] { "BrandName" });
Avatar billede decrypto Nybegynder
13. april 2006 - 13:21 #40
Skal der stå mere end ds.Tables["BrandTable"].-et eller andet???
Avatar billede decrypto Nybegynder
13. april 2006 - 13:39 #41
Det burder kunne lade sig gøre 'view.ToTable(true, new string[] { "BrandName" });' returnerer et DataTable og jeg vil blot sætte min 'ds.Tables["BrandTable"]' lig med det.
Avatar billede decrypto Nybegynder
13. april 2006 - 14:17 #42
Hold kæft, hvor har jeg bare mange problemer med al det her....
Avatar billede dr_chaos Nybegynder
13. april 2006 - 14:27 #43
du behøver vel egentligtalt ikke at lave relationer i mellem det enkelte tabeller.
Kan du ikke bare lave en select på dit typed dataset for at hente data som du skal bruge.
Avatar billede decrypto Nybegynder
13. april 2006 - 14:47 #44
Nu får jeg en:

System.NullReferenceException was unhandled by user code
  Message="Object reference not set to an instance of an object."

på min relation.
Avatar billede decrypto Nybegynder
13. april 2006 - 14:55 #45
Jo, men hvis jeg skal lave repeaters som jeg skal binde med mine datset tables. Hvis jeg så skal lave tre repeaters, så skal det vel være udfra tre datatables. Eller gør jeg det bare besværligt.
Avatar billede decrypto Nybegynder
13. april 2006 - 14:57 #46
Jeg startede ellers med at lave tre tmp datatables, som jeg fik fyldt med data ud fra mit Typed Dataset. Nu har jeg bare 'pakket' TmpTabellerne ind i et Dataset som jeg så vil relatere med hinanden.
Avatar billede decrypto Nybegynder
13. april 2006 - 15:18 #47
Okay, nu har jeg fået mit dataset med mine tre datatabeller, samt relationerne på plads.
Avatar billede decrypto Nybegynder
13. april 2006 - 15:19 #48
UUh yeah nu skal jeg bare lave mine nested repeaters.
Avatar billede decrypto Nybegynder
13. april 2006 - 15:36 #49
Okay jeg tror jeg holder en pause....arbejder på sagen igen iaften.
Avatar billede decrypto Nybegynder
13. april 2006 - 15:36 #50
Men jeg er taknemmelig for din hjælp.
Avatar billede dr_chaos Nybegynder
13. april 2006 - 15:47 #51
fik du lavet relationer eller ?
Jeg skal nok forsøge at kigge ind og hjælpe dig.
Avatar billede decrypto Nybegynder
13. april 2006 - 20:05 #52
Ja, jeg fik lavet relationer, nu skal jeg lave repeaters.
Avatar billede decrypto Nybegynder
13. april 2006 - 20:27 #53
Okay, hvis jeg nu paster et simpelt eksempel:

<asp:Repeater ID="brandCatalog" runat="server">
    <ItemTemplate>                     
        <%# Eval("brandName")%><br />
    </ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="productGroupCatalog" runat="server">
  <ItemTemplate>
      <%# Eval("productGroupName")%><br />
  </ItemTemplate>
</asp:Repeater>
<asp:Repeater ID="productCatalog" runat="server">
    <ItemTemplate>                     
      <%# Eval("productName")%><br />
    </ItemTemplate>
</asp:Repeater>

Dette virker fint lige nu. Nu er udfordringen 'bare' at vikle dem ind i hinanden, således at BrandRepeater ligger yderst, og herefter kommer ProductGroup repeateren, og til sidst ProductRepeateren. Det burde da kunne lade sig gøre...
Avatar billede dr_chaos Nybegynder
13. april 2006 - 21:09 #54
<asp:Repeater ID="brandCatalog" ItemDataBound="brandCatalog_ItemDataBound"  runat="server">
    <ItemTemplate>                   
        <%# Eval("brandName")%><br />
<asp:label id="lblid" runat="Server" Text='<%# Eval("brandid")%>' ></asp:label>
<asp:Repeater ID="productGroupCatalog" runat="server">
  <ItemTemplate>
      <%# Eval("productGroupName")%><br />
  </ItemTemplate>
</asp:Repeater>

    </ItemTemplate>
</asp:Repeater>
Avatar billede dr_chaos Nybegynder
13. april 2006 - 21:12 #55
private void CategoryRepeater_ItemDataBound(object sender,
    System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
    RepeaterItem item = e.Item;
    if( (item.ItemType == ListItemType.Item) ||
        (item.ItemType == ListItemType.AlternatingItem) )
    {
        label l  = (label) item.FindControl("lblid");
int id = int.Parse(l.Text);       
Repeater r  = (Repeater) item.FindControl("productGroupCatalog");

       
        r.DataSource = //hent de tilhørende productgroupcataloger baseret på brandid;
        r.DataBind();
    }
}
Avatar billede dr_chaos Nybegynder
13. april 2006 - 21:12 #56
Det er måden at gøre det på
Avatar billede decrypto Nybegynder
13. april 2006 - 21:24 #57
Okay prøver lige din ide....jeg var ellers gået igang med at brygge noget....

Jeg har ikke baseret min relationer på id'er men navne istedet....men det burde også virke.
Avatar billede decrypto Nybegynder
13. april 2006 - 21:36 #58
Jeg laver dette i vs 2005, er det også det du har brugt???

For jeg har ingen ItemDataBound event, men bruger OnItemDataBound
Avatar billede decrypto Nybegynder
13. april 2006 - 21:39 #59
Jeg er der næsten....
Avatar billede decrypto Nybegynder
13. april 2006 - 21:47 #60
Jeg har problemer med:

protected void brandCatalog_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
  RepeaterItem item = e.Item;
  if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
  {
    Repeater productGroupCatalog = (Repeater)item.FindControl("productGroupCatalog");
    DataRowView drv = (DataRowView)item.DataItem;
    productGroupCatalog .DataSource = drv.CreateChildView("brandCatalog");<--- fejl her
    productGroupCatalog .DataBind();
  }
}
Avatar billede decrypto Nybegynder
13. april 2006 - 21:48 #61
Hovsa...har lige opdaget en lille fejl, retter den liiige.
Avatar billede decrypto Nybegynder
13. april 2006 - 21:51 #62
Nåh det hjalp ikke...
Avatar billede decrypto Nybegynder
13. april 2006 - 21:57 #63
Og så fik jeg vist lortet til at virke....nu skal jeg prøve med den tredje inderste repeater....
Avatar billede decrypto Nybegynder
13. april 2006 - 22:04 #64
Juhuuuu, du får points....
Avatar billede decrypto Nybegynder
13. april 2006 - 22:04 #65
men jeg synes 15 er lidt i underkanten...
Avatar billede decrypto Nybegynder
13. april 2006 - 22:06 #66
Jeg har givet dig karma.... men findes/fandtes der ikke en funktion så man kunne høve point satsen....
Avatar billede decrypto Nybegynder
13. april 2006 - 23:32 #67
Hvorfor kan man ikke lave en repeater i en <HeaderTemplate>????
Avatar billede decrypto Nybegynder
14. april 2006 - 00:05 #68
Ok, fik ordnet det der med <HeaderTemplate> no problem....ved du hvordam man kan tælle antal repeats???
Avatar billede decrypto Nybegynder
14. april 2006 - 00:12 #69
jeg har nemlig et eksempel på at jeg skal lave en rowspan på en celle hvis den repeater mere end 1 gang. så skal rowspan i td uden om den have en rowspan="[antal repeats]", er det noget, der kan lade sig gøre?
Avatar billede dr_chaos Nybegynder
14. april 2006 - 14:54 #70
du kan godt hæve antallet af points. Noget med at man kan ændre indstillinger for spørgsmålet.
er altid glad for karma :)
Mht til dit sidste spørgsmål. Så kan du bruge brandCatalog.Items.Count.
Avatar billede dr_chaos Nybegynder
14. april 2006 - 16:18 #71
prøv lige at paste din kode som du bruger til det nested repeaters altså fra aspx siden.
Avatar billede decrypto Nybegynder
14. april 2006 - 20:06 #72
Smid bare et svar ind.
Avatar billede dr_chaos Nybegynder
14. april 2006 - 23:38 #73
svar :=)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester