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.
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.
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.
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???
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.
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?
her er et eksempel på hvordan du opretter relationer: ds.Relations.Add("navn", ds.Tables["tabel1"].Columns["col1"], ds.Tables["tabel2"].Columns["col2"]);
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.
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.
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...
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 :-)
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"]);???
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....
// 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" });
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.
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.
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.
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.
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...
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?
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.
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.