Esportazione del contenuto di un DataGrid in RTF

di Daniele Bochicchio, in ASP.NET, C#, Report,

Dalla versione 2000 Word supporta l'importazione di documenti in formato HTML come se fossero documenti salvati in uno dei formati che è supportato direttamente.
Questo permette di creare facilmente dei report completi anche dal punto di vista grafico, semplicemente formattando a dovere l'HTML.
In questo esempio viene recuperato l'HTML generato dal DataGrid e tramite il cambio di ContentType e l'aggiunta di una header viene richiamato Word.

<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<SCRIPT language="C#" runat="server">
// stringa di conn
string connstring = @"server=localhost;database=pubs;trusted_connection=true;";

void Page_Load () {
  // cambio del content type e delle header
  Response.ContentType = "application/msword";
  Response.AddHeader("content-disposition", "inline; filename=report.doc");

  Response.Clear();

  // estrazione dati
  getWordHtml(myDG);

  Response.End();
}

// routine di estrazione dati
void getWordHtml (DataGrid dg) {

   // connessione
  using (SqlConnection conn = new SqlConnection(connstring))
  {
     SqlDataAdapter query = new SqlDataAdapter("SELECT * FROM titles", conn);
     // creo il dataset
     DataSet querydataset = new DataSet();
     query.Fill(querydataset);

    dg.DataSource = querydataset;
    dg.DataBind();
  }

  // creo gli oggetti necessari a leggere il codice HTML
  string html = String.Empty;
  using (StringWriter stringWriter = new StringWriter())
  using (HtmlTextWriter sourcecode = new HtmlTextWriter(stringWriter))
  {
    // catturo il codice HTML e lo salvo in una stringa
    dg.RenderControl(sourcecode);
    sourcecode.Flush();

    html = stringWriter.ToString();
  }

  // risultato finale
  Response.Write(html);
}

</SCRIPT>
<form runat="server" visible="false">
<ASP:DataGrid id="myDG" runat="server"
    HeaderStyle-BackColor="#336699"
    HeaderStyle-Font-Size="Large"
    ItemStyle-BackColor="lightsteelblue"
    AlternatingItemStyle-BackColor="lightgray" />
</form>

Il codice può essere adattato a qualsiasi web control, anche all'intera pagina.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi