Linkbutton e DetailsView: domanda

giovedì 17 agosto 2006 - 13.20

Giovanni_3478 Profilo | Senior Member

Ciao

Dato questo codice

<asp:LinkButton ID="LinkButton1" runat="server">
<asp:DetailsView ID="DetailsView21" runat="server" DataSourceID="SqlDataSource1" AutoGenerateRows="False" GridLines="None">
<Fields>
<asp:BoundField DataField="text_header" SortExpression="text_header" ShowHeader="False" HtmlEncode="false" ApplyFormatInEditMode="false" />
</Fields>
</asp:DetailsView>
</asp:LinkButton>

visualizzo un testo (quello prelevato dal db) che non non ha più le caratteristiche del controllo linkbutton: se vi clicco sopra non parte nessun evento.

C' forse qualche proprietà del detailsview da settare
oppure bisogna settare qualcosa nel campo del database?

freeteo Profilo | Guru

ciao,
scusa ma non capisco come mai vuoi mettere dentro ad 1 linkbutton 1 detailsview
Se devi mettere 1campo di tipo "link" basta che nel DetailsView metti il field di tipo "linkButton" ovvero button di tipo link...:
... <asp:DetailsView ID="DetailsView1" runat="server" > <Fields> <asp:ButtonField DataTextField="campo" /> ...
e gli specifichi il campo che vuoi come sorgente del testo etc...

Se devi essere piu agile pero' ti consiglio di usare 1 "itemTemplate" in modo da poter customizzare a piacimento l'aspetto del campo:
... <asp:DetailsView ID="DetailsView1" runat="server" > <Fields> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ....> <%# Eval("campo") %> </ItemTemplate> </asp:TemplateField> ...

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Avevo già provato:
... <asp:DetailsView ID="DetailsView1" runat="server" > <Fields> <asp:TemplateField> <ItemTemplate> <asp:LinkButton ....> <%# Eval("campo") %> </ItemTemplate> </asp:TemplateField> ...




ma al controllo linkbutton è associato da codice l'handler dell'evento onclick
per cui quando vado a inserire il controllo linkbutton nel detailsview da codice non mi vede più il controllo linkbutton e mi restituisce un errore:

"La clausola Handles richiede una variabile WithEvents definita nel tipo che la contiene o in uno dei suoi tipi di base."

1) Devo creare quindi una variabile withevents come l'esempio preso dalla msdn?
E' questo l'unico modo per gestire gli eventi dei controlli annidati che dal codice non vengono visti?
' Declare a WithEvents variable. Dim WithEvents EClass As New EventClass ' Call the method that raises the object's events. Sub TestEvents() EClass.RaiseEvents() End Sub ' Declare an event handler that handles multiple events. Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent MsgBox("Received Event.") End Sub Class EventClass Public Event XEvent() Public Event YEvent() ' RaiseEvents raises both events. Sub RaiseEvents() RaiseEvent XEvent() RaiseEvent YEvent() End Sub End Class


2)E' possibile settare dal metodo eval un qualcosa di simile alla proprietà html-encode ?

Giovanni_3478 Profilo | Senior Member

up

freeteo Profilo | Guru

>1) Devo creare quindi una variabile withevents come l'esempio
>preso dalla msdn?
non serve, quello li è 1esempio standard per velocizzarti nello sviluppo di 1caso standard, ovvero quando tu fai doppioclick sul controllo a design, lui ti genera il codice dell'evento e lo aggancia con "Handles".
Ma puoi fare lo stesso mettendo nella pagina aspx, l'evento "Onclick" puntato su qualsiasi evento che gli vada bene (ad esempio tutti i link li puoi far puntare allo stesso gestore).
Quindi nel codice aspx scrivi il tuo linkbutton cosi':
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"> premi qui </asp:LinkButton>
e poi da codice togli l'handles dopo il metodo, lasci solo la sua definizione
Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs)
cosi' non importa averlo dichiarato "classico", l'associazione "evento->gestore" avviene dopo, in fase di runtime



>2)E' possibile settare dal metodo eval un qualcosa di simile
>alla proprietà html-encode ?
se tu scrivi <%# Eval("campo") %> è in formato cosi' com'e' (quindi se dentro a "campo" hai stringhe tipo "<hr>" lui fa la riga per intenderci)

ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Io avevo questo codice

Protected Sub LinkButton1_PreRender(ByVal sender As Object, ByVal e As System.EventArgs)
If GridView2.Rows.Count > 0 Then
If GridView2.Rows(0).Cells(1).Text = "True" Then
LinkButton1.Visible() = True
Else
LinkButton1.Visible() = False
End If
Else
LinkButton1.Visible() = False
End If
End Sub

Ora scriverò
Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

If GridView2.Rows.Count > 0 Then
If GridView2.Rows(0).Cells(1).Text = "True" Then
*.Visible() = True
Else
*.Visible() = False
End If
Else
*.Visible() = False
End If
End Sub


Al posto dell'asterisco dato che il linbutton1 non me lo riconosce

uso il sender.
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