9 messaggi dal 21 gennaio 2011
Salve
inserisco questo post dopo aver letto quello titolato come "GridView: apertura di un file aspx o pdf"
ho lo stesso problema: devo aprire dei file,in particolare,file pdf.
ho visto sui testi e guardato in rete ma, col risultato di una confusione terribile, in merito all'uso degli hyperlink.
Vorrei capirne meglio l'uso e le proprietà.
magari con un esempio. in pratica vorrei capire, avendo come riferimento una situazione del genere:
devo visualizzare diversi file in pdf, associati a diversi clienti ( ES. Cilente A -> file 1.pdf e 2.pdf nella cartella del sito CLiA, ClienteB -> file 3.pdf e 4.pdf nella cartella del sito CliB )
da una tabella del database access eseguo una query in un datasource, sui campi idcliente,descrizione file,campo link del file (cioè il percorso del file nell'albero del sito).
ora, ad una gridview associo il datasource e poi configuro questo famigerato campo hyperlink.Ma come? quale stringa inserire come percorso per il link?
ho visto in giro che cìè chi usa il navigateurlfield, chi i templatefield ecc., ma non ho capito le situazioni in cui usare uno o l'altro e come usare le proprietà.
ho guardato gli esempi riportati in questo post ma non riesco a collegarli al mio caso.
grazie dell'aiuto
11.886 messaggi dal 09 febbraio 2002
Contributi
alec19700 ha scritto:

ho visto in giro che cìè chi usa il navigateurlfield, chi i templatefield ecc.,


Sì, puoi usare o l'uno o l'altro. Entrambi sono validi ma la scelta dipende da cosa devi realizzare.

NavigateUrlField è un tipo di campo molto specializzato, infatti ha il solo scopo di visualizzare un link. Per questa sua caratteristica, il codice richiesto è molto conciso. Supponiamo che il tuo DataSource sia una lista di oggetti (o un DataTable) contenenti un campo chiamato "LinkDelFile":

<asp:HyperLinkField Text="Apri PDF" DataNavigateUrlFields="LinkDelFile" />


Giusto una riga. Ho solo dovuto indicare un testo e il nome del campo ("LinkDelFile") dal quale l'HyperLinkField andrà a leggersi l'url.

Tuttavia l'HyperLinkField è anche un po' rigido: se per esempio metti la GridView in modalità di editing, quel campo continuerà a visualizzare un link, non sarà reso modificabile dall'utente.


Dall'altra parte abbiamo il TemplateField che è un tipo di campo molto più versatile. Puoi inserire al suo interno quello che vuoi, un comune <asp:HyperLink potrebbe andar bene nel tuo caso.

<asp:TemplateField><ItemTemplate><asp:HyperLink runat="server" Text="Apri PDF" NavigateUrl=<%# Eval("url") %> /></ItemTemplate></asp:TemplateField>


La versatilità si paga, infatti vedi come mi sia servito molto più codice rispetto all'esempio precedente, ma dentro l'ItemTemplate ho la libertà di inserire tutto il contenuto che voglio. Per esempio potrei aggiungere l'iconcina del PDF, oltre al link, cosa che non mi sarebbe stata possibile con l'HyperLinkField (a meno di non smanettare con gli stili CSS).

Il TemplateField ti permette inoltre di creare un contenuto diverso quando la riga della GridView è in modalità modifica. Ti basta definire un <EditItemTemplate> così come nell'esempio ho definito un <ItemTemplate>, e mettere al suo interno una Textbox affinché l'utente possa modificare il link (se questo è quello che ti serve).

Quindi, se il tuo intento è soltanto quello di far vedere un link, vai con l'HyperLinkField. Se invece ti serve un contenuto più ricco o se il link deve poter essere modificato, allora scegli il TemplateField.

ciao

Enjoy learning and just keep making
9 messaggi dal 21 gennaio 2011
Grazie!!! Ora va molto meglio. volevo chiederti però solo un chiarimento: nel 2° esempio,nell'uso del TemplateField,dove sta l'associazione del campo hyperlink con il campo che contiene effettivamente il link? Comunque,in tutti i casi,nella pratica, basta che scrivo ,nel campo del database, il percorso relativo del file che serve visualizzare, cioè una cosa tipo: "/CartellaCliente/Documento.pdf",poi, nella GridView creo il campo Hyperlink e poi,utilizzando DataNavigateUrlFields, indico il campo che contiene il link, come hai detto tu e il gioco è fatto? E' giusto?
in molti casi,circa il percorso,ho visto invece anche l'utilizzo di DataNavigateUrlFormatString. Altro problema!!!
ciao e grazie mille ancora
11.886 messaggi dal 09 febbraio 2002
Contributi

el 2° esempio,nell'uso del TemplateField,dove sta l'associazione del campo hyperlink con il campo che contiene effettivamente il link?


Eccola qui. Uso un'espressione di binding per legare il valore del campo "LinkDelFiule" alla proprietà NavigateUrl dell'HyperLink. Posto solo il frammento di codice:
NavigateUrl=<%# Eval("LinkDelFile") %>


(in effetti nell'esempio postato ieri avevo usato "url" come nome del campo anziché "LinkDelFile", quindi penso che sia stato questo ad aver generato confusione, scusa)


Comunque,in tutti i casi,nella pratica, basta che scrivo ,nel campo del database, il percorso relativo del file che serve visualizzare, cioè una cosa tipo: "/CartellaCliente/Documento.pdf",poi, nella GridView creo il campo Hyperlink e poi,utilizzando DataNavigateUrlFields, indico il campo che contiene il link, come hai detto tu e il gioco è fatto? E' giusto?

Sì, esatto.


in molti casi,circa il percorso,ho visto invece anche l'utilizzo di DataNavigateUrlFormatString

L'utilizzo di questo attributo è opzionale. Lo puoi usare se ti occorre "completare" il link, o se il link deve essere generato dalla concatenazione di più campi.

Per ipotesi, pensa se i documenti PDF venissero spostati altrove, in un altro server raggiungibile da un altro dominio. Dovresti quindi aggiornare tutti i link da "/CartellaCliente/Documento.pdf" a "http://fileclienti.dominio.it/CartellaCliente/Documento.pdf". OPPURE, potresti lasciare intatti tutti i tuoi link e "completarli" grazie all'attributo DataNavigateUrlFormatString dell' HyperLinkField. Ecco l'esempio:

<asp:HyperLinkField  Text="Apri PDF" DataNavigateUrlFormatString="http://fileclienti.dominio.it{0}" DataNavigateUrlFields="LinkDelFile" />


Quel {0} è un segnaposto che verrà sostituito con il valore di LinkDelFile. Il risultato sarà un link a http://fileclienti.dominio.it/CartellaCliente/Documento.pdf

Nota come l'attributo "DataNavigateUrlFields" sia plurale (termina con s). Vuol dire che puoi indicare anche più di un campo. Il mio link, per esempio, viene generato a partire dall'ID del cliente e dall'anno in cui si è registrato.

<asp:HyperLinkField Text="Apri PDF" DataNavigateUrlFormatString="/registrazioni/{0}/Cliente{1}.pdf" DataNavigateUrlFields="AnnoDiRegistrazione, ID" />


Nel DataNavigateUrlFields ho indicato due campi e nella DataNavigateUrlFormatString ho quindi la possibilità di usare due segnaposto: {0} e {1}, che identificano rispettivamente AnnoDiRegistrazione e ID. Il link risultante sarà una cosa tipo questa:
/registrazioni/2010/Cliente820.pdf

E in questo specifico caso non ho dovuto neanche predisporre un campo "LinkDelFile" perché mi sono potuto generare il link partendo dai valori di altri campi già esistenti.

ciao,
Modificato da BrightSoul il 13 luglio 2011 21.13 -

Enjoy learning and just keep making
9 messaggi dal 21 gennaio 2011
avevo intuito che "url" fosse il campo e mi hai dato la conferma.
Per quanto riguarda DataNavigateUrlFormatString mi hai dato il "LA" per tutta una serie di cose che mi sono venute in mente, che non hai idea.
Mi sono messo ieri a fare un pò di prove e tutto funziona bene secondo quanto hai detto. devo solo capire come mai,una volta cliccato sul link nella gridview,il browser mi dice "file non trovato", ma sono sicuro che devo vedere bene la sisntassi del percorso del file. vero?
comunque grazie di tutto, ho imparato molto ( i libri non dicono tutto in modo chiaro. ho riletto le stesse cose dopo i tuoi post e,adesso si,che si capisce).ciao

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.