Avatar billede websam Nybegynder
26. maj 2005 - 09:47 Der 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 ?

/Websam
Avatar billede websam Nybegynder
26. maj 2005 - 12:10 #1
Det første der undre mig er at når jeg laver en drag and drop af et datagrid ind i itemtemplate i datalisten så laver vs 2003 ikke selv den :

Protected WithEvents DataGrid1 As System.Web.UI.WebControls.DataGrid

men selve datalisten er der godt nok :

Protected WithEvents DataList1 As System.Web.UI.WebControls.DataList

Hvad skyldes det ?

/Websam
Avatar billede websam Nybegynder
27. maj 2005 - 17:48 #2
?
Avatar billede burningice Nybegynder
28. maj 2005 - 11:01 #3
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;

  dg.DataSource = HentNogetUdFraId(id);
  dg.DataBind();

}
Avatar billede websam Nybegynder
28. maj 2005 - 12:18 #4
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)

/Websam
Avatar billede websam Nybegynder
30. maj 2005 - 00:01 #5
I denne linie :

int id = ((Kategori)e.Item.DataItem).Id;

som oversat til vb bliver således :

Dim id As Integer = CType(e.Item.DataItem, Kategori).Id

jeg er lidt i tvivl om hvad kategori referere til. Da jeg får en fejl om at kategori ikke er defineret ?

/Websam
Avatar billede websam Nybegynder
30. maj 2005 - 00:02 #6
Og er det meningen at functionen automatisk smidder data i datagridet ?

/Websam
Avatar billede burningice Nybegynder
30. maj 2005 - 00:10 #7
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.
Avatar billede websam Nybegynder
30. maj 2005 - 00:17 #8
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)

/Websam
Avatar billede burningice Nybegynder
30. maj 2005 - 00:28 #9
hvilken type har du brugt som datasource til din datalist. Er det arraylist, DataReader, en DataTable, et DataView eller... ?

Typen af e.Item.DataItem afhænger alt efter hvilken type du har brugt som datasource.

Hvis det er en DataReader mener jeg at e.Item.DataItem er en DataRowView, og den har samme indexering som en normal datareader:

ie.

DataRowView drv = (DataRowView)e.Item.DataItem;
int id = drv["id"];
Avatar billede burningice Nybegynder
30. maj 2005 - 00:29 #10
i værste fald kan du altid tjekke typen ved hjælp af lidt debugging

Response.Write(e.Item.DataItem.GetType().ToString());
Avatar billede websam Nybegynder
30. maj 2005 - 09:07 #11
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

Jeg ved ikke om det hjælper på det ?

/Websam
Avatar billede websam Nybegynder
30. maj 2005 - 09:26 #12
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 ?

/Websam
Avatar billede burningice Nybegynder
30. maj 2005 - 12:17 #13
Hvis du bruger et DataView som datasource cil det enkelte item være et DataRowView (dette kan ses ved at læse dokumentationen).

Og hvad får dig til at tro at dit dataview pludselig har en id-egenskab. Ved at læse SDK'et ser jeg ingen Id-egenskab (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadataviewmemberstopic.asp)

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
Avatar billede burningice Nybegynder
30. maj 2005 - 12:18 #14
Dim id As Integer = (CType(e.Item.DataItem, DataRowView))("id")
Avatar billede websam Nybegynder
30. maj 2005 - 16:01 #15
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
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