[ASP.NET] in OnItemDataBound van datalist toegang tot data

Pagina: 1
Acties:

  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
Hoe kan ik in de CodeBehind in de OnItemDataBound van een DataList control toegang krijgen tot de data die in een bepaalde row zit?
In een DataGrid kan dat volgens mij via:
code:
1
DataGrid.Items(e.Item.ItemIndex).Cells(n).Text


Wat ik dus niet bedoel is in de .aspx gebruik maken van:
code:
1
DataBinder.Eval(Container.DataItem, "veldnaam")


In plaats hiervan zoek ik een soortgelijke methode, waarmee ik de inhoud van "veldnaam" in mijn CodeBehind kan benaderen.
Heeft iemand een idee hoe dit in een DataList kan?

Een file op de A12 is nooit grappig...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Een datalist raised ook een ItemBound event?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
jup...

Een file op de A12 is nooit grappig...


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

En dan gebruik je die toch? Ik neem aan dat je dat wel hebt kunnen vinden...
De sender is dat het datalistitem, met findcontrol kan je vervolgens de waarde er uit halen.

[ Voor 20% gewijzigd door gorgi_19 op 20-06-2003 14:35 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
Dat lost het probleem niet op, dat zou nu ook gaan namelijk.
Wat ik namelijk ben vergeten te vertellen is dat de betreffende waardes niet in een control zitten, maar gewoon in de list zijn geplempt, mbv
code:
1
DataBinder.Eval(Container.DataItem, "veldnaam")


En zoals ik het dan nu bedenk zou de enige mogelijkheid zijn om alle velden die ik zou willen weten (maar niet wil showen in de datalist) in een hidden textboxcontrol te zetten...
En dan denk ik, dat moet toch anders kunnen :?

[ Voor 2% gewijzigd door MrHighStone op 20-06-2003 15:28 . Reden: zei ik grid? list bedoel ik natuurlijk! ]

Een file op de A12 is nooit grappig...


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Je kan er toch aan in je OnItemDataBound event handler hoor:

code:
1
string s = e.Item.Cells[0].Text;


bv.

Zie ook hier:
[rml]whoami in "[ ASP.NET] Webdev tips"[/rml]

Ow, ik zie nu dat je het over een DataList hebt.
Hoezo, de waarden zijn er zo gewoon in geplempt? Die waarden worden toch ergens in een control gezet in de ItemTemplate van die DataList?

[ Voor 30% gewijzigd door whoami op 20-06-2003 15:43 ]

https://fgheysels.github.io/


  • tijn
  • Registratie: Februari 2000
  • Laatst online: 31-07 00:06
In je ItemDataBound event kun je bij de datasource komen die je controls van data voorziet (dit lukt bijvoorbeeld niet meer in het ItemCreated event:

C#:
1
2
3
4
5
6
7
8
9
10
11
private void List_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
    if (e.Item.DataItem != null)
    {
        // Wanneer je datalist gebonden is aan een DataView is je DataItem een DataRowView.
        // Als je datalist gebonden is aan een collectie van objecten is DataItem een van die objecten
        DataRowView row = (DataRowView)e.Item.DataItem;
        string veld1  = Convert.ToString(row["veld1"]);
        enz...
    }
}


Overigens vind ik het achterhalen van DataGrid waardes via e.Item.Cells[0].Text aan de ranzige kant. Even de kolommen reorganiseren en je applicatie doet de meest bizarre dingen...

Cuyahoga .NET website framework


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
tijn schreef op 20 June 2003 @ 16:24:
Overigens vind ik het achterhalen van DataGrid waardes via e.Item.Cells[0].Text aan de ranzige kant. Even de kolommen reorganiseren en je applicatie doet de meest bizarre dingen...
Tuurlijk, daar heb je helemaal gelijk in. Ik ben gewoon te lui om veel te typen.

De numerieke indexer is ook wel sneller dan als je de veldnaam gebruikt, maar je hebt wel gelijk ivm onderhoudbaarheid, duidelijkheid, etc...

https://fgheysels.github.io/


  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
Mijn datalist is gebonden aan een SqlDataReader.
Met bovenstaande oplossing krijg ik een 'Specified cast not valid' rond mijn oren.

Gebruik overigens VB.NET, en dan kom ik tot het volgende:
code:
1
2
Dim drvRow = CType(e.Item.DataItem, DataRowView)
Dim SomeID = drvRow("SomeID").ToString


Maar zoals gezegd, dit gaat mis...

Overigens ben ik het helemaal met je eens tav het benaderen van cells.

Een file op de A12 is nooit grappig...


  • EfBe
  • Registratie: Januari 2000
  • Niet online
SomeID is in die row waarschijnlijk NULL. Je moet eerst testen op IsNull, dan casten indien niet NULL.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
EfBe, ben je tip ook tegengekomen op http://msdn.microsoft.com...atalistitemsatruntime.asp
Helaas gaat ie bij mij steeds mis in de regel
code:
1
Dim drvRow As DataRowView = CType(e.Item.DataItem, DataRowView)

Hier krijg ik steeds de fout 'Specified cast nog valid'...

Een file op de A12 is nooit grappig...


  • MrHighStone
  • Registratie: November 2001
  • Laatst online: 03-02-2023
Het lijkt erop dat ik de oplossing gevonden heb!
Door in plaats van een DataRowView een DbDataRecord te gebruiken krijg ik het gewenste resultaat:
code:
1
2
Dim ddrRecord As DbDataRecord = CType(e.Item.DataItem, DbDataRecord)
Dim iSomeID As Integer = CInt(ddrRecord("SomeID"))


Vond de tip in deze link, en de debugger, die aangaf dat e.ItemDataItem van het type DbDataRecord is:
http://support.microsoft....scid%3Dkb%3Bja%3BJP317429

Een file op de A12 is nooit grappig...

Pagina: 1