Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Datagrid e word
venerdì 23 aprile 2004 - 11.55
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
l.corallini
Profilo
| Junior Member
127
messaggi | Data Invio:
ven 23 apr 2004 - 11:55
Ciao a tutti,
ho la necessità di esportare dei dati su Word da una pagina aspx. Cerco di spiegare come è formata questa:
ho una datagrid in cui ho inserito una checkbox, una volta sezionata una o più checkbox clicco sul tasto Word che nelle mie intenzioni dovrebbe fare nell'ordine
- controllare gli items selezionati
- chiamare 3 funzioni che mi restituiscono 3 dataset passandogli i campi chiave
...ora arriva il bello...
- aprie word e farmi vedere i 3 dataset per ogni item selezionato con la checkbox.
ho provato con questo codice (lo stesso che ho utilizzato per l'esport in excel, e che ha funzionato, anche se in quel caso le "tabelle" da portare a video erano solo e sempre due)
ma mi da un errore il render della datagrid....
' Set the content type to Word.
Response.ContentType = "application/msword"
' Remove the charset from the Content-Type header.
Response.Buffer = True
Response.Charset = ""
Response.AddHeader("content-disposition", "inline; filename=stampa.doc")
Me.EnableViewState = False
Dim tw As New System.IO.StringWriter
Dim hw As New System.Web.UI.HtmlTextWriter(tw)
Dim cb As CheckBox
Dim dsItem As DataGridItem 'DataGridItem
For Each dsItem In DatagridTreni.Items
cb = CType(dsItem.Cells(13).Controls(1), CheckBox)
If cb.Checked Then
dsDettaglio = GestoreFasciaOraria.PercorsoTreno(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsPercorso = GestoreFasciaOraria.PercorsoTreno(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsComposizione = GestoreFasciaOraria.ComposizioneTreno(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
DatagridPercorso.DataSource = dsPercorso
DatagridPercorso.DataBind()
DatagridComposizione.DataSource = dsComposizione
DatagridComposizione.DataBind()
DatagridPercorso.DataSource()
DatagridPercorso.RenderControl(hw)
Response.Write(tw.ToString())
End If
Next
Response.Flush()
Response.End()
è possibile utilizzare i dataset direttamente senza riempire delle datagrid?anche perchè dovrei crearle dinamicamente....
posso utilizzare qualche altra strada più semplice e più "intelligente"?
grazie
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 23 apr 2004 - 19:29
Ciao, credo che il tuo approccio al problema non sia corretto, ora ti spiego.
Innazitutto tu il DataSet lo puoi usare come vuoi, fondamentalmente è una rappresentazione in memoria del Database. Il DataSet infatti può contenere tabelle, relazioni, records, e così via.
Per operare con Word o più in generale con gli strumenti di Office si può agire in diversi modi. Uno è quello che hai utilizzato tu, cioè modificare il content-type e dire che sta arrivando un documento di excel piuttosto che di Word. Questo però è possibile solo perchè Excel poi riesce ad interpretare correttamente tutto. Non ho mai provato con Word ma anche lui potrebbe riuscirci.
La via corretta però secondo me è utilizzare gli Office PIAs che sono praticamente degli assemblies .NET che ti consentono di interagire con l'Object Model degli strumenti di Office e quindi prenderne il controllo, eventualmente produrre documenti di word ufficiali da girare poi al client che ne fa richiesta.
Ho scritto qualcosa sui PIAs e qui puoi vedere qualcosa:
http://www.dotnethell.it/articles/article.aspx?ArticleID=96
Inoltre molte informazioni aggiuntive le puoi trovare nei vecchi Posts, è sufficiente digitare la keyword PIA nel modulino che trovi in alto e premere cerca.
fammi sapere.
ciao
david
l.corallini
Profilo
| Junior Member
127
messaggi | Data Invio:
mer 28 apr 2004 - 15:23
sapevo di questa possibilità ma mi sembra che la possibilità di utilizzo sia limitata alla versione di office installata sui client.
comunque ho risolto il problema creando delle stringhe che poi con dei response.write mi faccio restituire a video. forse non è il modo più elegante o esemplare ma funziona.
per farti capire ecco uno stralcio di codice:
For Each dsItem In DatagridTreni.Items
cb = CType(dsItem.Cells(14).Controls(1), CheckBox)
If cb.Checked Then
dsPercorso = GestoreFasciaOraria.PercorsoTrenoWord(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsComposizione = GestoreFasciaOraria.ComposizioneTrenoWord(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsDettaglioSezione = GestoreFasciaOraria.TreniDettaglio(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsSezione = GestoreFasciaOraria.GetSezioneTrenoSel(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text)
dsPesoLunghezza = GestoreFasciaOraria.PesoLunghezzaTreno(dsItem.Cells(0).Text, dsItem.Cells(1).Text, dsItem.Cells(2).Text, dsItem.Cells(3).Text, dsItem.Cells(4).Text)
'DatagridPercorso.DataSource = dsPercorso
'DatagridPercorso.DataBind()
'DatagridComposizione.DataSource = dsComposizione
'DatagridComposizione.DataBind()
Dim dr As DataRow
Dim testo As String
'Creo Tabella Intestazione
testo = "<table border=1 cellSpacing='0'cellPadding='0' width=100%>"
Response.Write(testo)
testo = "<tr>"
Response.Write(testo)
testo = "<TD style='FONT-WEIGHT: bold; FONT-SIZE: x-small; FONT-FAMILY: verdana,arial,helvetica' align='center' bgColor='#d1dbef'>"
Response.Write(testo & dsDettaglioSezione.Tables(0).Rows(0).Item(4) & " - " & dsDettaglioSezione.Tables(0).Rows(0).Item(5))
testo = "</TD>"
Response.Write(testo)
testo = "</tr>"
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
mer 28 apr 2004 - 15:54
Beh non è proprio così.
La versione di Word installata sul client non c'entra niente, piuttosto quella sul Server.
Ti ricordo che stai sviluppando una applicazione ASP.NET quindi server side, quindi che conta è ciò che c'è sul server. Il client dovrà semplicemente leggere il documento prodotto.
Certo che se sul server c'è Office 2003 e sul client Office 95 forse non riuscira ad aprire quei file .doc.
La tua soluzione può funzionare ma l'utilizzo del Response.Write è ormai obsoleto e poco flessibile rispetto agli strumenti a disposizione oggi con ASP.NET.
ciao
david
Torna su
Stanze Forum
Elenco Threads
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 !