[ASP.Net] ItemCommand en DataItem

Pagina: 1
Acties:

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Ik heb een webpagina die een lijst maakt door middel van een repeater aan de hand van een eigen (strongly typed) collection. Dat gaat perfect.
Maar nu wil ik in de ItemCommand-event van die repeater het een en ander met het geselecteerde object gaan doen. Maar als ik dan van de RepeaterItemCommandEventArgs (oid) de Item.DataItem opvraag, dan is die altijd 'null'.
Nu komt dit natuurlijk doordat het een postback is en alle objecten daarna weg zijn.

Maar hoe is zoiets het handigst op te lossen ?

Het gaat bij mij om een dynamisch iets, waar verschillende collections kunnen worden meegegeven. Dus het 'id' meegeven als argument en het goede object daarna ophalen gaat niet zomaar even.

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

gorgi_19

Kruimeltjes zijn weer op :9

Welke code heb je op dit moment?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Ik heb de code op m'n laptop staan, dus die kan ik niet zomaar even hier copy/paste'n. Maar het is gewoon hele standaard-code:
code:
1
2
3
4
5
6
7
8
9
10
public void Fill(CollectionBase collection)
{
    repeater.DataSource = collection;
    repeater.DataBind();
}

protected void Repeater_ItemCommand(object sender, RepeaterItemCommandEventArgs args)
{
    ...
}


Zoiets dus.
Die ItemCommand-event wordt wel netjes gefired en ik kan ook wel wat gegevens achterhalen (CommandArgument, etc.). Maar de property DataItem is dus gewoon 'null'.

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Is er helemaal niemand die zelf ooit dit probleem is tegengekomen ??

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

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 was eik wel benieuwd naar de code in je Repeater_ItemCommand method.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
In m'n Repeater_ItemCommand staat gewoon iets als:
code:
1
textBox1.Text = ((User)args.Item.DataItem).Username;


Maar die DataItem is dus 'null' (omdat ie na de PostBack de objecten zelf niet meer heeft).
Maar hoe is zoiets nu het handigst op te lossen zonder de objecten weer opnieuw uit de DB te moeten ophalen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:02
Heb je 'EnableViewState' op true staan?

https://fgheysels.github.io/


  • maikel
  • Registratie: Januari 2001
  • Laatst online: 20-08 09:32
Ja.
Maar is het niet logisch dat die objecten null zijn? Het is namelijk na een roundtrip en dan zijn alle objecten toch weer weg?
Mijn vraag ik dus meer wat de beste manier is om zoiets op te lossen.
Hoe lossen jullie zoiets op?

Verwijderd

De DataGrid en DataList bewaren de collectie waaraan gebonden moet worden in de ViewState. Bij de Repeater zul je hier zelf voor moeten zorgen.

De meest voor de hand liggende plaats is dus de ViewState. Je zou er natuurlijk ook voor kunnen kiezen de binding in de Page_Load te zetten, zodat de data bij iedere postback opnieuw opgehaald wordt uit de datasource. Hangt een beetje van het scenario af.
Pagina: 1