26. maj 2005 - 09:47Der er
14 kommentarer og 1 løsning
Datagrid i datalist !
Hejsa,
Jeg har lavet en datalist control som lister en række kategorier under hver af disse kategorier skal jeg så have listet en række under kategorier, men kun dem der tilhøre den enkelte kategori.
Mit spørgsmål går nu på hvordan jeg får kategoriernes id'er fra datalisten med over i datagridet for så at kunne finde de tilhørende under kategorier fra databasen ?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
det skyldes at dit datagrid er nested, dvs. at du kan ikke få nogen entydig reference til den ved at erklære den som et field, da der jo kan findes n antal datagrids, hvor at n er antallet af kategorier.
Ang. at få en enkelt kategori-id ind i datagriddet kan du gøre det ved hjælp af ItemDataBound på din datalist:
protected void DataList_ItemDataBound(...) {
DataGrid dg = (DataGrid)e.Item.FindControl("ditDataGrid"); int id = ((Kategori)e.Item.DataItem).Id;
Nu fik jeg godt nok lukket denne inden jeg så din kommentar men hvis jeg kan hitte ud af at få det til at virke skal jeg nok smide point af til dig :o)
Kategori er bare et eksempel på en type det evt. kunne tænkes at du bindede datalisten med. Du bytter bare den type ud med den type der passer i dit scenarie.
Dernæst er HentNogetUdFraId også en fiktiv funktion der skal illustrere at du skal kalde en eller anden funktion der henter de data der skal smides i datagriddet.
Forstår jeg det korekt når jeg har 3 elementer i min datalist som er id, category, description som jeg kan binde at det så er en af dem jeg skal bruge ?
Selve functionen der skal hente nogle underkategorier ind i datagridet er der styr på, det er bare lige hvad det er du hentyder til i den linie jeg skrev ovenfor :o)
jeg henter data fra databasen og ligger dem i et dataset. Derefter smidder jeg dem op i cache ved hjælp af dataview. Og når jeg skriver dataview ind som type så giver den en fejl der siger :
'Id' is not a member of 'System.Data.DataView'.
I denne linie :
Dim id As Integer = CType(e.Item.DataItem, DataView).Id
Ok ved at ændre en smule i min function så den ser således ud :
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles DataList1.ItemDataBound Dim dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) Dim id As Integer = DataList1.DataKeys(e.Item.ItemIndex)
dg.DataSource = ProductsBiz.getCategorySub(Session("setLanguage"), id) dg.DataBind() End Sub
Altså har jeg ændret denne DataListCommandEventArgs til dette DataListItemEventArgs og henter ideet med DataList1.DataKeys(e.Item.ItemIndex) ja så viser den noget i datagridet, men med det samme id som er fra den første kategori i min dataliste og den skal jo bruge forskelligt afhænigt af hvilken kategori der er tale om ?
Protected Sub DataList1_ItemDataBound(ByVal sender As Object, ByVal e As DataListItemEventArgs) Handles DataList1.ItemDataBound Dim dg As DataGrid = CType(e.Item.FindControl("DataGrid1"), DataGrid) Dim id As Integer = (CType(e.Item.DataItem, DataRowView)("id")
dg.DataSource = ProductsBiz.getCategorySub(Session("setLanguage"), id) dg.DataBind() End Sub
jeg beklager meget min manglende viden og til tider forståelse for .net platformens opbygning :o)
Men jeg tror nu det er lykkedes mig ta få det til at virke og jeg har oprettet et spm med point til dig :o)
/Websam
Synes godt om
Ny brugerNybegynder
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.