itised
07-10-2010, 10:12
Salve.
Dovrei esportare il contenuto di una GridView di una pagina aspx in un foglio di Excel. In sostanza si tratta di un calendario lezioni per una scuola, che contiene tutte le lezioni che ci sono in una settimana. La mia esigenza è di mettere un'interruzione di pagina prima del giovedi, in modo che ci siano 3 giorni su una pagina e 3 su un'altra. Questo è il metodo che utilizzo per esportare:
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Me.EnableViewState = False
Dim oStringWriter As New System.IO.StringWriter
Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter)
Dim GridViewD As New GridView
GridViewD = dg 'Dove dg è la GridView che viene dalla pagina
...
'Qui il codice vario per formattare
...
GridViewD.RenderControl(oHtmlTextWriter)
Dim stringa As String = oStringWriter.ToString()
Response.Write(stringa)
Response.[End]()
Non utilizzo le Interop di Excel perchè questo sito finirà sull'hosting di Aruba, già esistente, che non è dedicato e non vi è installato Office.
Sono più o meno riuscito comunque a formattare il foglio in modo soddisfacente ma l'unica cosa rimasta in sospeso è appunto l'interruzione. Avendo colonne fisse, ho inserito questo codice nel punto giusto:
If GridViewD.Rows(i).Cells(1).Text.StartsWith("Giovedi ") Then
GridViewD.Rows(i).Style.Add("page-break-before", "always")
End If
ma non ha funzionato e mi spiego meglio.
Se io metto un break point prima del Response.Write e guardo cosa c'è in "stringa", noto che l'attributo CSS page-break-before è correttamente presente nel tag TR della riga dove c'è Giovedi. Se io copio il contenuto di "stringa" e lo incollo in notepad salvandolo poi come pagina HTM, aprendola da browser e andando su anteprima di stampa, l'interruzione è presente e corretta.
Se invece lascio che generi il file XLS, mi apre Excel, vado in anteprima di stampa e l'interruzione è sparita. Se poi salvo come HTM il file XLS appena creato, vedo che nel codice HTML page-break-before è effettivamente scomparso.
Mi viene quindi il sospetto che Excel elabori il codice HTML un po' a modo suo...
Ho cercato molto anche in internet ma non ho trovato altro al momento. Ringrazio in anticipo chi vorrà darmi una dritta.
Dovrei esportare il contenuto di una GridView di una pagina aspx in un foglio di Excel. In sostanza si tratta di un calendario lezioni per una scuola, che contiene tutte le lezioni che ci sono in una settimana. La mia esigenza è di mettere un'interruzione di pagina prima del giovedi, in modo che ci siano 3 giorni su una pagina e 3 su un'altra. Questo è il metodo che utilizzo per esportare:
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.Charset = ""
Me.EnableViewState = False
Dim oStringWriter As New System.IO.StringWriter
Dim oHtmlTextWriter As New System.Web.UI.HtmlTextWriter(oStringWriter)
Dim GridViewD As New GridView
GridViewD = dg 'Dove dg è la GridView che viene dalla pagina
...
'Qui il codice vario per formattare
...
GridViewD.RenderControl(oHtmlTextWriter)
Dim stringa As String = oStringWriter.ToString()
Response.Write(stringa)
Response.[End]()
Non utilizzo le Interop di Excel perchè questo sito finirà sull'hosting di Aruba, già esistente, che non è dedicato e non vi è installato Office.
Sono più o meno riuscito comunque a formattare il foglio in modo soddisfacente ma l'unica cosa rimasta in sospeso è appunto l'interruzione. Avendo colonne fisse, ho inserito questo codice nel punto giusto:
If GridViewD.Rows(i).Cells(1).Text.StartsWith("Giovedi ") Then
GridViewD.Rows(i).Style.Add("page-break-before", "always")
End If
ma non ha funzionato e mi spiego meglio.
Se io metto un break point prima del Response.Write e guardo cosa c'è in "stringa", noto che l'attributo CSS page-break-before è correttamente presente nel tag TR della riga dove c'è Giovedi. Se io copio il contenuto di "stringa" e lo incollo in notepad salvandolo poi come pagina HTM, aprendola da browser e andando su anteprima di stampa, l'interruzione è presente e corretta.
Se invece lascio che generi il file XLS, mi apre Excel, vado in anteprima di stampa e l'interruzione è sparita. Se poi salvo come HTM il file XLS appena creato, vedo che nel codice HTML page-break-before è effettivamente scomparso.
Mi viene quindi il sospetto che Excel elabori il codice HTML un po' a modo suo...
Ho cercato molto anche in internet ma non ho trovato altro al momento. Ringrazio in anticipo chi vorrà darmi una dritta.