AddHandler dopo il PageLoad

domenica 23 marzo 2008 - 21.59

s_dimaio Profilo | Junior Member

All'interno di un datalist inserisco in maniera dinamica tutta una serie di linkbutton all'interno dell'evento "ItemDataBound".
tmplb = New LinkButton tmplb.Text = "testo" tmplb.ID = "tempbutton" -->AddHandler tmplb.Click, AddressOf Me.tmplb_click<-- e.Item.Controls.Add(tmplb)

Ho la necessità di associare ad ogni linkbutton un evento onclick. L'aggiunta del semplice addhandler come indicato però non funziona per un problema di ordine degli eventi (gli handler sono richiamati al momento del "page_load" quando ancora il mio linkbutton non esiste perchè viene creato successivamente nel "itemdatabound").

Esiste un modo per associare ad ogni linkbutton creato l'evento onclick?

ciao e grazie

rossimarko Profilo | Guru

Ciao,

devi usare l'evento ItemCreated per inserire il bottone e agganciare il relativo evento.
Poi per il popolamento inserisci il codice nell'itemDataBound: vai a prendere il riferimento al pulsante creato (un semplice FindControl con l'ID corretto) e popoli le proprietà che ti interessano

Marco

s_dimaio Profilo | Junior Member

Ho provato ma non riesco a creare il bottone nell'ItemCreated per poi popolarlo nell'ItemDataBound perchè il numero di bottoni per riga che devo andare a creare dipende dal contenuto della riga. Quindi nell'itemcreated non so se in quella riga ci sarà uno o quattro bottoni.

Ma non è possibile recuperare i dati del DB direttamente dall'ItemCreated?!?!?!

Ho fatto:

Dim drv As System.Data.DataRowView = _ CType(e.Item.DataItem, System.Data.DataRowView) Dim miocampo as String = drv.Row("campodb")

ma mi restituisce l'errore "System.NullReferenceException: Object reference not set to an instance of an object." mentre se associato all'evente ItemDataBound funziona...

eppure negli esempi di msdn la cosa gira! (http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.datalist.itemcreated(VS.71).aspx)

Qualche idea?!

ciao e grazie!

rossimarko Profilo | Guru

Tu controlli che il tipo dell'item sia Item o AlternatingItem come viene fatto nell'esempio?

Altra cosa, l'esempio che c'è nel link che hai postato funziona perchè quando effettui il databind la prima volta il dataitem nell'evento ItemCreated risulta popolato. Nell'esempio poi non sono inseriti pulsanti o altro che faccia fare il postback e quindi funziona correttamente.
Se provi a mettere un pulsante nel template di riga dell'esempio vedrai che quando lo schiacci ti da errore, perchè l'itemCreated viene richiamato anche dopo il postback e in questo caso non c'è un datasource associato.

Il numero di pulsanti che devi creare è fisso oppure variabile? Mi spiego meglio. Tu hai un campo che ti dice quanti pulsanti visualizzare per ogni riga oppure dei semplici flag che ti dicono se abilitare o meno un'opzione?

Nel secondo caso potresti risolvere il tutto così:
- nell'itemcreated crei tutti i pulsanti e imposti la proprietà visible = false
- nell'itemdatabound vai a prendere il riferimento al pulsante e lo imposti visible solo se è specificato nel dataitem
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5