217 messaggi dal 15 settembre 2001
Ho un semplice Datalist che mi elenca varie voci di un menu.
Devo fare in modo che siano cliccabili. Con classic ASP avrei fatto una cosa tipo a href="visualizza.asp?id" & recorset("idmenu") ma non ASP.Net ho visto che si può fare in 50 modi diversi... Ho provato un asp:hyperlink ma non riesco ad ad assegnare alla proprietà NavigateUrl "visualizza.aspx?id" & <%#DataBinder.Eval(Container.DataItem, "IdMenu")%> - come mai?

Teoricamente dovrei ragionare per evento, ovvero, ad ogni cella creata del datalist devo impostare la proprietà oggetto.navigateurl = DataBinder.Eval(Container.DataItem, "IdMenu") ma non capisco come farlo.

Le due righe di codice sono queste:

<code>
<asp:DataList id="Customers" runat="server" RepeatDirection="Horizontal" RepeatColumns="2" cellspacing="2" Font-Names="Tahoma" Font-Size="X-Small">
<ItemStyle backcolor="#f3f3f3"></ItemStyle>
<ItemTemplate>
<asp:Hyperlink runat="server" text='<%# DataBinder.Eval(Container.DataItem, "DescrMenu") %>' NavigateUrl= '<%#DataBinder.Eval(Container.DataItem, "IdMenu")%>' />
</ItemTemplate>
</asp:DataList>
</code>
Son sbagliate perchè nel navigateURL manca il nome della pagina che deve ricevere il parametro.....scusate se è una banalità ma ho avuto tempo solo ora
di iniziare a guardare .Net


Modificato da geno il 18 maggio 2004 13.23 -
11.886 messaggi dal 09 febbraio 2002
Contributi
fallo alla tua maniera, se dai retta a quei 50 modi ti fonde il cervello.
Si fa semplicemente:

<ItemTemplate>
<a href="visualizza.aspx?id=<%#Container.DataItem("idmenu")%>">Clicca qui</a>
</ItemTemplate>

Enjoy learning and just keep making
217 messaggi dal 15 settembre 2001
grazie bright! molto gentile! ...in effetti così è il modo piu semplice in assoluto per fare quello che stavo cercando di fare
30 messaggi dal 06 novembre 2002
geno ha scritto:
grazie bright! molto gentile! ...in effetti così è il modo piu semplice in assoluto per fare quello che stavo cercando di fare


scusate ma come posso fare in modo che se il campo e vuoto non visualizzi il link?!?


Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao, puoi farlo in due modi, il primo è un po' grezzo ma abbastanza intuibile mentre il secondo è un po' più elegante.
Te li espongo tutti e due così puoi conoscere le alternative a tua disposizione

1) puoi usare una funzione esterna a cui passi il valore "idmenu", così:

<ItemTemplate>
<%#tuafunzione(Container.DataItem("idmenu"))%>
</ItemTemplate>

poi nella pagina, definisci una funzione che valuti il contenuto del parametro idmenu. Se il campo è vuoto, la funzione non ritornerà alcun testo, altrimenti ritornerà il testo html che compone il link

function tuafunzione(valore as Object) As String
if valore & "" = "" then
return ""
else
return "<a href=""visualizza.aspx?id=" & valore & """>Clicca qui</a>"
end if
end function

2) usare il gestore evento onItemDataBound.
ogni volta che un elemento (record) viene aggiunto al repeater si genera un evento che puoi catturare e gestire con onItemDataBound. Prima scrivi questo sul tuo repeater:

<asp:repeater id="pippo" runat="server" onItemDataBound="lafunzione">

in modo che lafunzione() possa essere invocata ad ogni elemento. Poi predisponi il tuo link all'iterno dell'itemtemplate:

<ItemTemplate>
<asp:hyperlink id="miolink" runat="server" NavigateURL="visualizza.aspx?id=<%#Container.DataItem("idmenu")%>">Clicca qui</asp:hyperlink>
</ItemTemplate>

e infine scrivi lafunzione() che dovrà rendere il tuo hyperlink visibile o invisibile.

Sub lafunzione(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs)
if e.Item.Itemtype = ListItemType.Item OR e.Item.Itemtype = ListItemType.AlternatingItem then
'se idmenu è vuoto, rendo invisile il link
if e.Item.DataItem("idmenu") & "" = "" then
'con questo comando posso accedere al controllo
'hyperlink che avevo creato nell'itemtemplate
DirectCast(e.Item.FindControl("miolink"), HyperLink).visible=false
end if
End Sub

non ho provato questo codice, se ci sono problemi fai un altro post.
ciao.


Modificato da BrightSoul il 20 settembre 2004 19.54 -

Enjoy learning and just keep making
30 messaggi dal 06 novembre 2002
BrightSoul ha scritto:
ciao, puoi farlo in due modi, il primo è un po' grezzo ma abbastanza intuibile mentre il secondo è un po' più elegante.
Te li espongo tutti e due così puoi conoscere le alternative a tua disposizione

1) puoi usare una funzione esterna a cui passi il valore "idmenu", così:

<ItemTemplate>
<%#tuafunzione(Container.DataItem("idmenu"))%>
</ItemTemplate>

poi nella pagina, definisci una funzione che valuti il contenuto del parametro idmenu. Se il campo è vuoto, la funzione non ritornerà alcun testo, altrimenti ritornerà il testo html che compone il link

function tuafunzione(valore as Object) As String
if valore & "" = "" then
return ""
else
return "<a href=""visualizza.aspx?id=" & valore & """>Clicca qui</a>"
end if
end function

2) usare il gestore evento onItemDataBound.
ogni volta che un elemento (record) viene aggiunto al repeater si genera un evento che puoi catturare e gestire con onItemDataBound. Prima scrivi questo sul tuo repeater:

<asp:repeater id="pippo" runat="server" onItemDataBound="lafunzione">

in modo che lafunzione() possa essere invocata ad ogni elemento. Poi predisponi il tuo link all'iterno dell'itemtemplate:

<ItemTemplate>
<asp:hyperlink id="miolink" runat="server" NavigateURL="visualizza.aspx?id=<%#Container.DataItem("idmenu")%>">Clicca qui</asp:hyperlink>
</ItemTemplate>

e infine scrivi lafunzione() che dovrà rendere il tuo hyperlink visibile o invisibile.

Sub lafunzione(sender As Object, e As System.Web.UI.WebControls.RepeaterItemEventArgs)
if e.Item.Itemtype = ListItemType.Item OR e.Item.Itemtype = ListItemType.AlternatingItem then
'se idmenu è vuoto, rendo invisile il link
if e.Item.DataItem("idmenu") & "" = "" then
'con questo comando posso accedere al controllo
'hyperlink che avevo creato nell'itemtemplate
DirectCast(e.Item.FindControl("miolink"), HyperLink).visible=false
end if
End Sub

non ho provato questo codice, se ci sono problemi fai un altro post.
ciao.


Modificato da BrightSoul il 20 settembre 2004 19.54 -


non è che qualcuno ha la versione c# del secondo esempio?



Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.