quinta-feira, 13 de novembro de 2008

Criar relatório (.rdlc) na mão

Bom pessoal, nos links disponibilizo uma pequena solução de como criar um relatório .rdlc, ou seja, no formato do report viewer na mão. Bom contei com ajuda de alguns amigos para tal solução, por ser algo muito pouco divulgado ou quase não divulgado. Na verdade nem sabia que isto era possível. Aqui está os links: Defaul.aspx

terça-feira, 28 de outubro de 2008

Ler e escrever arquivo xml.

Boa tarde pessoal, estou colocando mais um exemplo em asp.net. O exemplo a seguir faz a escrita e a leitura de um arquivo xml. A estrutura utilizada no xml está específico para o caso em que utilizei, mas olhando como foi feito dá para entender e estender para outros casos.

/// 
        /// Escreve o xml de acordo com o padrão e salva no caminho passado como parâmetro
        /// 
        /// caminho onde será salvo o arquivo xml
        public void GravarXml(string caminho)
        {
            try
            {
                if (File.Exists(caminho)){
                    File.Delete(caminho);
                }
                FileStream fs = new FileStream(caminho, FileMode.Create);
                XmlWriter w = XmlWriter.Create(fs);
                w.WriteStartDocument();

                w.WriteStartElement("select");
                w.WriteElementString("consulta", txtConsulta.Text);

                w.WriteStartElement("campos");
                for (int i = 0; i < campos.Count; i++)
                {
                    w.WriteStartElement(dgvCampos.Rows[i].Cells["clCampo"].EditedFormattedValue.ToString());
                    w.WriteElementString("Tipo", ((DataGridViewComboBoxCell)dgvCampos.Rows[i].Cells["clTipo"]).EditedFormattedValue.ToString());
                    w.WriteElementString("Descricao", ((DataGridViewTextBoxCell)dgvCampos.Rows[i].Cells["clDescricao"]).EditedFormattedValue.ToString());
                    if (Convert.ToBoolean(((DataGridViewCheckBoxCell)dgvCampos.Rows[i].Cells["clGrid"]).EditedFormattedValue.ToString()))
                    {
                        w.WriteElementString("Grid", "true");
                    }
                    else
                        w.WriteElementString("Grid", "false");
                    if (Convert.ToBoolean(((DataGridViewCheckBoxCell)dgvCampos.Rows[i].Cells["clPesquisa"]).EditedFormattedValue.ToString()))
                    {
                        w.WriteElementString("Pesquisa", "true");
                    }
                    else
                    {
                        w.WriteElementString("Pesquisa", "false");
                    }
                    w.WriteStartElement("Lookup");
                    if (this.campos[i].Tipo_LookUp == "D")
                    {
                        w.WriteElementString("Dinâmico", "D");
                        w.WriteElementString("Select", this.campos[i].Select);
                    }
                    if (this.campos[i].Tipo_LookUp == "E")
                    {
                        w.WriteElementString("Estático", "E");

                        for (int j = 0; j < this.campos[i].Nome.Count; j++)
                        {
                            w.WriteElementString("Nome", this.campos[i].Nome[j].ToString());

                            w.WriteElementString("Valor", this.campos[i].Valor[j].ToString());
                        }
                    }
                    w.WriteEndElement();
                    w.WriteEndElement();

                }
                w.WriteEndElement();
                w.WriteEndElement();
                w.WriteEndDocument();
                w.Flush();
                fs.Close();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Excessão");
            }

        }
        /// 
        /// Ler o arquvio xml a partir do caminho passado como parâmetro
        /// 
        /// Caminho do arquivo xml
        public void LerXml(string caminho)
        {
            XmlTextReader r = new XmlTextReader(caminho);
            while (r.Read())
            {
                if (r.NodeType == XmlNodeType.Element && r.Name == "consulta")
                {
                    txtConsulta.Text = r.ReadString();
                }
                if (r.NodeType == XmlNodeType.Element && r.Name == "campos")
                {
                    GeraGrid();
                    int lin = 0;
                    bool ok = false;
                    string[] linha = new string[1];
                    while (!ok)
                    {
                        if (r.NodeType == XmlNodeType.Element && r.Name == "Tipo")
                        {
                            dgvCampos.Rows[lin].Cells["clTipo"].Value = r.ReadString();
                        }
                        if (r.NodeType == XmlNodeType.Element && r.Name == "Descricao")
                        {
                            dgvCampos.Rows[lin].Cells["clDescricao"].Value = r.ReadString();
                        }
                        if (r.NodeType == XmlNodeType.Element && r.Name == "Grid")
                        {
                            dgvCampos.Rows[lin].Cells["clGrid"].Value = r.ReadString();
                        }
                        if (r.NodeType == XmlNodeType.Element && r.Name == "Pesquisa")
                        {
                            dgvCampos.Rows[lin].Cells["clPesquisa"].Value = r.ReadString();
                            
                        }
                        if (r.NodeType == XmlNodeType.Element && r.Name == "Lookup")
                        {
                            r.Read();
                            if (r.NodeType == XmlNodeType.Element && r.Name == "Dinâmico")
                            {
                                this.campos[lin].Tipo_LookUp =r.ReadString();
                                r.Read();
                                this.campos[lin].Select = r.ReadString();
                                r.Read();
                            }
                            if (r.NodeType == XmlNodeType.Element && r.Name == "Estático")
                            {
                                this.campos[lin].Tipo_LookUp = r.ReadString();

                                while (r.Name != "Lookup")
                                {
                                    if (r.NodeType == XmlNodeType.Element && r.Name == "Nome")
                                    {
                                        this.campos[lin].Nome.Add(r.ReadString());
                                    }
                                    if (r.NodeType == XmlNodeType.Element && r.Name == "Valor")
                                    {
                                        this.campos[lin].Valor.Add(r.ReadString());
                                    }
                                    r.Read();
                                }
                            }
                        }
                        if (r.Name != "campos" && r.Name != "Tipo" && r.Name != "Descricao" &&
                            r.Name != "Grid" && r.Name != "Pesquisa" && r.Name != "Lookup" && r.NodeType == XmlNodeType.EndElement)
                        {
                            this.campos[lin].Campo = r.Name;
                            lin++;
                        }
                        if (r.NodeType == XmlNodeType.EndElement && r.Name == "campos")
                        {
                            ok = true;
                        }
                        r.Read();
                    }
                }
            }
        }
Bom é isso pessoal, qualquer dúvida só entrar em contato e até a próxima.

quarta-feira, 22 de outubro de 2008

Exportar um datatable para .doc, .xls, .txt, .pdf e .csv

Boa tarde pessoal, abaixo tem alguns métodos que utilizei para exportar um datatable, que na minha aplicação está preenchendo um gridview. Nester métodos abaixo o datatable pode ser exportado para os seguintes formatos: .pdf, .txt, .xls, .doc e .csv.
/// 
/// M‚todo que exporta um datatable para documento Excel
/// 
public void ExportarExcel()
{
System.Data.DataTable tb = (System.Data.DataTable)Session["tb"];
StringBuilder str = new StringBuilder();
str.Append("Relat¢rio de Itens da Solicita‡Æo

"); int borderWidth = 1; string boldTagStart = ""; string boldTagEnd = ""; str.Append(""); str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { str.Append(""); } str.Append(""); foreach (DataRow oDataRow in tb.Rows) { str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { if (oDataRow[oDataColumn.ColumnName] is long) { str.Append(""); } else { str.Append(""); } } str.Append(""); } str.Append("
" + boldTagStart + oDataColumn.ColumnName + boldTagEnd + "
" + oDataRow[oDataColumn.ColumnName].ToString() + "" + oDataRow[oDataColumn.ColumnName].ToString() + "
"); Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=filename.xls"); Response.Charset = ""; Response.ContentType = "application/vnd.xls"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); Response.Write(str.ToString()); Response.End(); } /// /// M‚todo que exporta um datatable para documento Word /// public void ExportarWord() { System.Data.DataTable tb = (System.Data.DataTable)Session["tb"]; StringBuilder str = new StringBuilder(); str.Append("Relat¢rio de Itens da Solicita‡Æo

"); int borderWidth = 1; string boldTagStart = ""; string boldTagEnd = ""; str.Append(""); str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { str.Append(""); } str.Append(""); foreach (DataRow oDataRow in tb.Rows) { str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { if (oDataRow[oDataColumn.ColumnName] is long) { str.Append(""); } else { str.Append(""); } } str.Append(""); } str.Append("
" + boldTagStart + oDataColumn.ColumnName + boldTagEnd + "
" + oDataRow[oDataColumn.ColumnName].ToString() + "" + oDataRow[oDataColumn.ColumnName].ToString() + "
"); Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=FileName.doc"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.word"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); Response.Write(str.ToString()); Response.End(); } /// /// M‚todo que exporta um datatable para .txt /// public void ExportarTxt() { System.Data.DataTable dt = (System.Data.DataTable)Session["tb"]; StringBuilder str = new StringBuilder(); int[] maior = ObterMaiorString(); //obt‚m o vetor com as colunas com as maiores quantidades de caracteres. str.Append("-------> RELATàRIO DE Itens da Solicita‡Æo <---------\r\n"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j <= dt.Columns.Count - 1; j++) { int aux = maior[j] - dt.Rows[i][j].ToString().Length; string espacos = ""; for (int x = 0; x < (maior[j] - dt.Rows[i][j].ToString().Length); x++) { espacos += " "; } str.Append(dt.Rows[i][j].ToString() + espacos + " "); } str.Append("\r\n"); } Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=FileName.txt"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/vnd.text"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); Response.Write(str.ToString()); Response.End(); } /// /// M‚todo que exportar um datatable para pdf usando a dll itextsharp /// public void ExportarPDF() { Response.Clear(); Document document = new Document(PageSize.A4.Rotate(), 80, 50, 30, 65); StringBuilder strData = new StringBuilder(string.Empty); string strHTMLpath = Server.MapPath("MyHTML.html"); string strPDFpath = Server.MapPath("MyPDF.pdf"); try { System.Data.DataTable tb = (System.Data.DataTable)Session["tb"]; StringBuilder str = new StringBuilder(); str.Append("Relat¢rio de Itens da Solicita‡Æo

"); str.Append(""); str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { str.Append(""); } str.Append(""); foreach (DataRow oDataRow in tb.Rows) { str.Append(""); foreach (DataColumn oDataColumn in tb.Columns) { if (oDataRow[oDataColumn.ColumnName] is long) { str.Append(""); } else { str.Append(""); } } str.Append(""); } str.Append("
" + oDataColumn.ColumnName + "
" + oDataRow[oDataColumn.ColumnName].ToString() + "" + oDataRow[oDataColumn.ColumnName].ToString() + "
"); StringWriter sw = new StringWriter(); sw.Write(str); HtmlTextWriter htw = new HtmlTextWriter(sw); StreamWriter strWriter = new StreamWriter(strHTMLpath, false, Encoding.UTF8); strWriter.Write("" + htw.InnerWriter.ToString() + ""); strWriter.Close(); strWriter.Dispose(); iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet(); styles.LoadTagStyle("ol", "leading", "16,0"); PdfWriter.GetInstance(document, new FileStream(strPDFpath, FileMode.Create)); document.Add(new Header(iTextSharp.text.html.Markup.HTML_ATTR_STYLESHEET, "Style.css")); document.Open(); ArrayList objects; styles.LoadTagStyle("li", "face", "garamond"); styles.LoadTagStyle("span", "size", "8px"); styles.LoadTagStyle("body", "font-family", "times new roman"); styles.LoadTagStyle("body", "font-size", "10px"); document.NewPage(); objects = iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList(new StreamReader(strHTMLpath, Encoding.Default), styles); for (int k = 0; k < objects.Count; k++) { document.Add((IElement)objects[k]); } } catch (Exception ex) { throw ex; } finally { document.Close(); Response.Write(Server.MapPath(".") + "\\MyPDF.pdf"); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment; filename=" + strPDFpath); Response.ContentType = "application/octet-stream"; Response.WriteFile(Server.MapPath(".") + "\\MyPDF.pdf"); Response.Flush(); Response.Close(); if (File.Exists(Server.MapPath(".") + "\\MyPDF.pdf")) { File.Delete(Server.MapPath(".") + \\MyPDF.pdf); } } } /// /// M‚todo que exporta um datatable para CSV /// public void ExportarCSV() { System.Data.DataTable dt = (System.Data.DataTable)Session["tb"]; StringBuilder str = new StringBuilder(); str.AppendLine("Relat¢rio de Itens da Solicita‡Æo"); foreach (DataColumn oDataColumn in dt.Columns) { str.Append(oDataColumn.ColumnName + ""); } foreach (DataRow oDataRow in dt.Rows) { str.AppendLine(); for (int i = 0; i < dt.Columns.Count; i++) { str.Append(oDataRow[i] + ""); } } Response.Clear(); Response.AddHeader("Content-Disposition", "attachment;filename=FileName.csv"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "text/plain"; System.IO.StringWriter stringWrite = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite); Response.Write(str.ToString()); Response.End(); }
Percebam que nós métodos acima o datatable estou passando através de uma session chamada session["tb"]. Agraços e até a próxima.

terça-feira, 30 de setembro de 2008