Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.

[ASP.Net] DataSource is array of hashtables

Pagina: 1
Acties:

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik probeer een DropDownlist op een webform te vullen met gegevens.
Deze gegevens worden iets wat omslachtig aangeleverd (heb ik vrijwel geen invloed op, komt uit andere module). Het aanleveren gaat als volgt:

Elk dataitem bevindt zich in een hashtable, waarin voor elke property een item in de hashtable bestaat.
De lijst van dataitems die aan de dropdownlist moeten worden toegevoegd zijn toegevoegd in een array => De array is gevuld met verschillende hashtables welke weer gevuld zijn met de daadwerkelijke data :/

Op zich zover geen problemen, echter probeer ik deze array met hashtables als data source in te stellen bij een DropDownList, wat op zich ook geen probleem is, echter het op de juiste manier eruit halen van de data voor de Key en Value kolom wel.

Als ik de volgende code gebruik om de data eruit te halen krijg ik de foutmelding:

"DataBinder.Eval: AppName.DataDBItem bevat geen eigenschap met de naam Item("Name"). "
DataDBItem is een eigen class welke inherits van een Hashtable.
De array welke aan de datasource wordt gekoppeld is als volgt gedeclareerd:

code:
1
2
3
Dim objObjects() As DataDBItem

objObjects = objTempObjects.ToArray(GetType(DataDBItem))


Dit was even wat speudo code uit de module waarop ik geen wijzigingen kan aanbrengen. objObjects krijg ik aangeleverd vanuit de module.

Dit is de code om de DropDownList te vullen.
code:
1
2
3
4
        cboList.DataSource = objObjects ' (Dit is de array met hashtables)
        cboList.DataTextField = "Item(""Name"")"
        cboList.DataValueField = "Item(""ID"")"
        cboList.DataBind()


Echter wanneer ik via code het volgende uitvoer, krijg ik geen foutmelding, maar gewoon de juiste waarde:

code:
1
Dim strName As String = objObjects(0).Item("Name")


Om de eerste naam eruit te halen (objObjects bevat >0 items)

Ik heb al gekeken om de gegevens eruit te halen met de DataBinder.Eval(Container.DataItem, "Name"), echter werkt dit ook niet (foutmelding dat deze property niet bestaat).

Ook heb ik al gekeken om iets met de iCollection te doen van Values van de hashtable, maar hierbij lukt het mij niet om op een of andere manier de iCollection met een bepaalde indexed-parameter de gegevens op te halen.

Volgens mij moet het toch mogelijk zijn om op deze manier gegevens uit de hashtables te halen? Ik weet dat er betere manieren zijn (zoals het anders aangeleverd krijgen van de gegevens, maar helaas heb ik hierop geen invloed :( ).

Ook als ik ga zoeken op internet met de combinaties "DataValueField hashtable" of Datavaluefield icollection" etc krijg ik geen antwoord op de vraag, wel om een enkele hashtable aan een datasource te hangen, maar niet een array van hashtables.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je kan op deze manier ook niet zomaar binden aan je "item('name')". DataTextField word gebruikt om via reflection een Property van je object op te halen. Je zou kunnen proberen DataTextField gewoon op "Name" te zetten. Maar ik weet niet zeker of de databinding van DropDownlist automatisch gebruik maakt van de Indexer property op het moment dat er geen property met die naam is.

Anders zul je zelf je items moeten adden in een van de events ( DataBinding o.i.d. )

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik heb nog even wat verder zitten spelen:

als ik de aanroep ipv Item("Name") aanpas naar bv ItemName welke een property (tijdelijk aangemaakt in wat speudo code waarmee ik het probleem probeer op te lossen, welke ik echter niet in de data-module kan doorvoeren) is gaat het wel goed.
DotNet heeft er dus moeite mee als de property die je wilt aanroepen een parameter verwacht.

@rwb: Het aanroepen met enkel "Name" werkt helaas niet. Daarnaast ook al de volgende opties geprobeert:

Item[Name]
Item[@Name]
Item["@Name")
Item[Field=Name] (Waarbij Field de naam van de parameter is)

Wat betreft databinding zal ik nog even verder zoeken: ik heb zojuist het event DataBinding afgevangen en vandaaruit de items collection gevuld, echter krijg ik deze niet te zien nadat de pagina geladen is. Wel krijg ik evenveel items in de lijst als dat er in de collection zitten, echter doet het Items.add stuk in de DataBInding niets: er komen geen extra regels in de lijst.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 16-11 10:25

gorgi_19

Kruimeltjes zijn weer op :9

Je zou eens kunnen proberen om CType(Databinder.Eval(Container.DataItem,"Value"), Hashtable).Item("Woei") te pakken.

Anders is een loopje ook een optie.

Digitaal onderwijsmateriaal, leermateriaal voor hbo