本地生成RDL报表文件的创建工具
生活随笔
收集整理的這篇文章主要介紹了
本地生成RDL报表文件的创建工具
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
昨天嘗試了一下,不使用Web Service,本地使用同樣的方法
????????string?strCon;
????????DataSet?ds?=?new?DataSet();
????????XmlDataDocument?xmlDataDoc;
????????strCon?=?"Server=10.100.3.248;initial?catalog=IGS-SMP-WorkTest;User?Id=WorkDeveloper;Password=developer;";
????????string?selectText?=?"SELECT?*?FROM?SMP_WorkItem";
????????SqlDataAdapter?dataAdapter?=?new?SqlDataAdapter(selectText,?strCon);
????????try
????????{
????????????dataAdapter.Fill(ds);
????????????xmlDataDoc?=?new?XmlDataDocument(ds);
????????????using(XmlTextWriter?writer?=?new?XmlTextWriter("Your?Report?Location",System.Text.Encoding.UTF8))
????????????{
?????????
????????????xmlDataDoc.WriteTo(writer);
???????
????????????writer.Flush();
????????????}
????????}
????????catch
????????{
????????????xmlDataDoc?=?null;
????????}
????????finally
????????{
????????????strCon?=?null;
????????????ds.Dispose();
????????}
????}
然后在Shared Data Source里指定生成的文件路徑,Query String根據(jù)微軟的說明,為空就可以了。
但是不能正確識別XML文件格式,參照向?qū)傻母袷?#xff0c;缺少了很多元素。
通過查找資料的時候發(fā)現(xiàn)一個解決方案,我們可以自己制作一個報表生成器,步驟如下:
1. 新建一個Console Application,建立報表生成器:
using?System;
using?System.Collections;
using?System.Data;
using?System.Data.SqlClient;
using?System.IO;
using?System.Text;
using?System.Xml;
namespace?RDLGenerator
{
????class?RdlGenerator
????{
????????SqlConnection?m_connection;
????????string?m_connectString;
????????string?m_commandText;
????????ArrayList?m_fields;
????????public?static?void?Main()
????????{
????????????RdlGenerator?myRdlGenerator?=?new?RdlGenerator();
????????????myRdlGenerator.Run();
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????//?Call?methods?to?create?the?RDL
????????????????this.OpenConnection();
????????????????this.GenerateFieldsList();
????????????????this.GenerateRdl();
????????????????Console.WriteLine("RDL?file?generated?successfully.");
????????????}
????????????catch?(Exception?exception)
????????????{
????????????????Console.WriteLine("An?error?occurred:?"?+?exception.Message);
????????????}
????????????finally
????????????{
????????????????//?Close?the?connection?string
????????????????m_connection.Close();
????????????}
????????}
????????public?void?OpenConnection()
????????{
????????????TODO:OpenConnection
????????}
????????public?void?GenerateFieldsList()
????????{
????????????TODO:GenerateFieldsList
????????}
????????public?void?GenerateRdl()
????????{
???????????TODO:?GenerateRdl
????????}
????}
}
2.創(chuàng)建你自己的數(shù)據(jù)庫連接:
????????public?void?OpenConnection()
????????{
????????????//?Create?a?connection?object
????????????m_connection?=?new?SqlConnection();
????????????//?Create?the?connection?string
????????????m_connectString?=?"Your?Connnection?String
????????????m_connection.ConnectionString?=?m_connectString;
????????????//?Open?the?connection
????????????m_connection.Open();
????????} 3.獲取你需要的數(shù)據(jù):
????????public?void?GenerateFieldsList()
????????{
????????????SqlCommand?command;
????????????SqlDataReader?reader;
????????????//?Executing?a?query?to?retrieve?a?fields?list?for?the?report
????????????command?=?m_connection.CreateCommand();
????????????m_commandText?=
???????????????"Your?SELECT?STRING";
????????????command.CommandText?=?m_commandText;
????????????//?Execute?and?create?a?reader?for?the?current?command
????????????reader?=?command.ExecuteReader(CommandBehavior.SchemaOnly);
????????????//?For?each?field?in?the?resultset,?add?the?name?to?an?array?list
????????????m_fields?=?new?ArrayList();
????????????for?(int?i?=?0;?i?<=?reader.FieldCount?-?1;?i++)
????????????{
????????????????m_fields.Add(reader.GetName(i));
????????????}
????????}
4.創(chuàng)建報表XML:
????????public?void?GenerateRdl()
????????{
????????????//?Open?a?new?RDL?file?stream?for?writing
????????????FileStream?stream;
????????????stream?=?File.OpenWrite("Report1.rdl");
????????????XmlTextWriter?writer?=?new?XmlTextWriter(stream,?Encoding.UTF8);
????????????//?Causes?child?elements?to?be?indented
????????????writer.Formatting?=?Formatting.Indented;
????????????//?Report?element
????????????writer.WriteProcessingInstruction("xml",?"version=\"1.0\"?encoding=\"utf-8\"");
????????????writer.WriteStartElement("Report");
????????????writer.WriteAttributeString("xmlns",?null,?"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
????????????writer.WriteAttributeString("xmlns:rd",?null,?"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
????????????writer.WriteElementString("Width",?"6in");
????????????//?DataSource?element
????????????writer.WriteStartElement("DataSources");
????????????writer.WriteStartElement("DataSource");
????????????writer.WriteAttributeString("Name",?null,?"DataSource1");
????????????writer.WriteStartElement("ConnectionProperties");
????????????writer.WriteElementString("DataProvider",?"SQL");
????????????writer.WriteElementString("ConnectString",?m_connectString);
????????????writer.WriteElementString("IntegratedSecurity",?"false");
????????????writer.WriteEndElement();?//?ConnectionProperties
????????????writer.WriteEndElement();?//?DataSource
????????????writer.WriteEndElement();?//?DataSources
????????????//?DataSet?element
????????????writer.WriteStartElement("DataSets");
????????????writer.WriteStartElement("DataSet");
????????????writer.WriteAttributeString("Name",?null,?"DataSet1");
????????????//?Query?element
????????????writer.WriteStartElement("Query");
????????????writer.WriteElementString("DataSourceName",?"DataSource1");
????????????writer.WriteElementString("CommandType",?"Text");
????????????writer.WriteElementString("CommandText",?m_commandText);
????????????writer.WriteElementString("Timeout",?"30");
????????????writer.WriteEndElement();?//?Query
????????????//?Fields?elements
????????????writer.WriteStartElement("Fields");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("Field");
????????????????writer.WriteAttributeString("Name",?null,?fieldName);
????????????????writer.WriteElementString("DataField",?null,?fieldName);
????????????????writer.WriteEndElement();?//?Field
????????????}
????????????//?End?previous?elements
????????????writer.WriteEndElement();?//?Fields
????????????writer.WriteEndElement();?//?DataSet
????????????writer.WriteEndElement();?//?DataSets
????????????//?Body?element
????????????writer.WriteStartElement("Body");
????????????writer.WriteElementString("Height",?"5in");
????????????//?ReportItems?element
????????????writer.WriteStartElement("ReportItems");
????????????//?Table?element
????????????writer.WriteStartElement("Table");
????????????writer.WriteAttributeString("Name",?null,?"Table1");
????????????writer.WriteElementString("DataSetName",?"DataSet1");
????????????writer.WriteElementString("Top",?".5in");
????????????writer.WriteElementString("Left",?".5in");
????????????writer.WriteElementString("Height",?".5in");
????????????writer.WriteElementString("Width",?(m_fields.Count?*?1.5)?+?"in");
????????????//?Table?Columns
????????????writer.WriteStartElement("TableColumns");
????????????for?(int?i?=?0;?i?<?m_fields.Count;?i++)
????????????{
????????????????writer.WriteStartElement("TableColumn");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteEndElement();?//?TableColumn
????????????}
????????????writer.WriteEndElement();?//?TableColumns
????????????//?Header?Row
????????????writer.WriteStartElement("Header");
????????????writer.WriteStartElement("TableRows");
????????????writer.WriteStartElement("TableRow");
????????????writer.WriteElementString("Height",?".25in");
????????????writer.WriteStartElement("TableCells");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("TableCell");
????????????????writer.WriteStartElement("ReportItems");
????????????????//?Textbox
????????????????writer.WriteStartElement("Textbox");
????????????????writer.WriteAttributeString("Name",?null,?"Header"?+?fieldName);
????????????????writer.WriteStartElement("Style");
????????????????writer.WriteElementString("TextDecoration",?"Underline");
????????????????writer.WriteEndElement();?//?Style
????????????????writer.WriteElementString("Top",?"0in");
????????????????writer.WriteElementString("Left",?"0in");
????????????????writer.WriteElementString("Height",?".5in");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteElementString("Value",?fieldName);
????????????????writer.WriteEndElement();?//?Textbox
????????????????writer.WriteEndElement();?//?ReportItems
????????????????writer.WriteEndElement();?//?TableCell
????????????}
????????????writer.WriteEndElement();?//?TableCells
????????????writer.WriteEndElement();?//?TableRow
????????????writer.WriteEndElement();?//?TableRows
????????????writer.WriteEndElement();?//?Header
????????????//?Details?Row
????????????writer.WriteStartElement("Details");
????????????writer.WriteStartElement("TableRows");
????????????writer.WriteStartElement("TableRow");
????????????writer.WriteElementString("Height",?".25in");
????????????writer.WriteStartElement("TableCells");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("TableCell");
????????????????writer.WriteStartElement("ReportItems");
????????????????//?Textbox
????????????????writer.WriteStartElement("Textbox");
????????????????writer.WriteAttributeString("Name",?null,?fieldName);
????????????????writer.WriteStartElement("Style");
????????????????writer.WriteEndElement();?//?Style
????????????????writer.WriteElementString("Top",?"0in");
????????????????writer.WriteElementString("Left",?"0in");
????????????????writer.WriteElementString("Height",?".5in");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteElementString("Value",?"=Fields!"?+?fieldName?+?".Value");
????????????????writer.WriteElementString("HideDuplicates",?"DataSet1");
????????????????writer.WriteEndElement();?//?Textbox
????????????????writer.WriteEndElement();?//?ReportItems
????????????????writer.WriteEndElement();?//?TableCell
????????????}
????????????//?End?Details?element?and?children???
????????????writer.WriteEndElement();?//?TableCells
????????????writer.WriteEndElement();?//?TableRow
????????????writer.WriteEndElement();?//?TableRows
????????????writer.WriteEndElement();?//?Details
????????????//?End?table?element?and?end?report?definition?file
????????????writer.WriteEndElement();?//?Table
????????????writer.WriteEndElement();?//?ReportItems
????????????writer.WriteEndElement();?//?Body
????????????writer.WriteEndElement();?//?Report
????????????//?Flush?the?writer?and?close?the?stream
????????????writer.Flush();
????????????stream.Close();
????????}
????????string?strCon;
????????DataSet?ds?=?new?DataSet();
????????XmlDataDocument?xmlDataDoc;
????????strCon?=?"Server=10.100.3.248;initial?catalog=IGS-SMP-WorkTest;User?Id=WorkDeveloper;Password=developer;";
????????string?selectText?=?"SELECT?*?FROM?SMP_WorkItem";
????????SqlDataAdapter?dataAdapter?=?new?SqlDataAdapter(selectText,?strCon);
????????try
????????{
????????????dataAdapter.Fill(ds);
????????????xmlDataDoc?=?new?XmlDataDocument(ds);
????????????using(XmlTextWriter?writer?=?new?XmlTextWriter("Your?Report?Location",System.Text.Encoding.UTF8))
????????????{
?????????
????????????xmlDataDoc.WriteTo(writer);
???????
????????????writer.Flush();
????????????}
????????}
????????catch
????????{
????????????xmlDataDoc?=?null;
????????}
????????finally
????????{
????????????strCon?=?null;
????????????ds.Dispose();
????????}
????}
然后在Shared Data Source里指定生成的文件路徑,Query String根據(jù)微軟的說明,為空就可以了。
但是不能正確識別XML文件格式,參照向?qū)傻母袷?#xff0c;缺少了很多元素。
通過查找資料的時候發(fā)現(xiàn)一個解決方案,我們可以自己制作一個報表生成器,步驟如下:
1. 新建一個Console Application,建立報表生成器:
using?System;
using?System.Collections;
using?System.Data;
using?System.Data.SqlClient;
using?System.IO;
using?System.Text;
using?System.Xml;
namespace?RDLGenerator
{
????class?RdlGenerator
????{
????????SqlConnection?m_connection;
????????string?m_connectString;
????????string?m_commandText;
????????ArrayList?m_fields;
????????public?static?void?Main()
????????{
????????????RdlGenerator?myRdlGenerator?=?new?RdlGenerator();
????????????myRdlGenerator.Run();
????????}
????????public?void?Run()
????????{
????????????try
????????????{
????????????????//?Call?methods?to?create?the?RDL
????????????????this.OpenConnection();
????????????????this.GenerateFieldsList();
????????????????this.GenerateRdl();
????????????????Console.WriteLine("RDL?file?generated?successfully.");
????????????}
????????????catch?(Exception?exception)
????????????{
????????????????Console.WriteLine("An?error?occurred:?"?+?exception.Message);
????????????}
????????????finally
????????????{
????????????????//?Close?the?connection?string
????????????????m_connection.Close();
????????????}
????????}
????????public?void?OpenConnection()
????????{
????????????TODO:OpenConnection
????????}
????????public?void?GenerateFieldsList()
????????{
????????????TODO:GenerateFieldsList
????????}
????????public?void?GenerateRdl()
????????{
???????????TODO:?GenerateRdl
????????}
????}
}
2.創(chuàng)建你自己的數(shù)據(jù)庫連接:
????????public?void?OpenConnection()
????????{
????????????//?Create?a?connection?object
????????????m_connection?=?new?SqlConnection();
????????????//?Create?the?connection?string
????????????m_connectString?=?"Your?Connnection?String
????????????m_connection.ConnectionString?=?m_connectString;
????????????//?Open?the?connection
????????????m_connection.Open();
????????} 3.獲取你需要的數(shù)據(jù):
????????public?void?GenerateFieldsList()
????????{
????????????SqlCommand?command;
????????????SqlDataReader?reader;
????????????//?Executing?a?query?to?retrieve?a?fields?list?for?the?report
????????????command?=?m_connection.CreateCommand();
????????????m_commandText?=
???????????????"Your?SELECT?STRING";
????????????command.CommandText?=?m_commandText;
????????????//?Execute?and?create?a?reader?for?the?current?command
????????????reader?=?command.ExecuteReader(CommandBehavior.SchemaOnly);
????????????//?For?each?field?in?the?resultset,?add?the?name?to?an?array?list
????????????m_fields?=?new?ArrayList();
????????????for?(int?i?=?0;?i?<=?reader.FieldCount?-?1;?i++)
????????????{
????????????????m_fields.Add(reader.GetName(i));
????????????}
????????}
4.創(chuàng)建報表XML:
????????public?void?GenerateRdl()
????????{
????????????//?Open?a?new?RDL?file?stream?for?writing
????????????FileStream?stream;
????????????stream?=?File.OpenWrite("Report1.rdl");
????????????XmlTextWriter?writer?=?new?XmlTextWriter(stream,?Encoding.UTF8);
????????????//?Causes?child?elements?to?be?indented
????????????writer.Formatting?=?Formatting.Indented;
????????????//?Report?element
????????????writer.WriteProcessingInstruction("xml",?"version=\"1.0\"?encoding=\"utf-8\"");
????????????writer.WriteStartElement("Report");
????????????writer.WriteAttributeString("xmlns",?null,?"http://schemas.microsoft.com/sqlserver/reporting/2005/01/reportdefinition");
????????????writer.WriteAttributeString("xmlns:rd",?null,?"http://schemas.microsoft.com/SQLServer/reporting/reportdesigner");
????????????writer.WriteElementString("Width",?"6in");
????????????//?DataSource?element
????????????writer.WriteStartElement("DataSources");
????????????writer.WriteStartElement("DataSource");
????????????writer.WriteAttributeString("Name",?null,?"DataSource1");
????????????writer.WriteStartElement("ConnectionProperties");
????????????writer.WriteElementString("DataProvider",?"SQL");
????????????writer.WriteElementString("ConnectString",?m_connectString);
????????????writer.WriteElementString("IntegratedSecurity",?"false");
????????????writer.WriteEndElement();?//?ConnectionProperties
????????????writer.WriteEndElement();?//?DataSource
????????????writer.WriteEndElement();?//?DataSources
????????????//?DataSet?element
????????????writer.WriteStartElement("DataSets");
????????????writer.WriteStartElement("DataSet");
????????????writer.WriteAttributeString("Name",?null,?"DataSet1");
????????????//?Query?element
????????????writer.WriteStartElement("Query");
????????????writer.WriteElementString("DataSourceName",?"DataSource1");
????????????writer.WriteElementString("CommandType",?"Text");
????????????writer.WriteElementString("CommandText",?m_commandText);
????????????writer.WriteElementString("Timeout",?"30");
????????????writer.WriteEndElement();?//?Query
????????????//?Fields?elements
????????????writer.WriteStartElement("Fields");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("Field");
????????????????writer.WriteAttributeString("Name",?null,?fieldName);
????????????????writer.WriteElementString("DataField",?null,?fieldName);
????????????????writer.WriteEndElement();?//?Field
????????????}
????????????//?End?previous?elements
????????????writer.WriteEndElement();?//?Fields
????????????writer.WriteEndElement();?//?DataSet
????????????writer.WriteEndElement();?//?DataSets
????????????//?Body?element
????????????writer.WriteStartElement("Body");
????????????writer.WriteElementString("Height",?"5in");
????????????//?ReportItems?element
????????????writer.WriteStartElement("ReportItems");
????????????//?Table?element
????????????writer.WriteStartElement("Table");
????????????writer.WriteAttributeString("Name",?null,?"Table1");
????????????writer.WriteElementString("DataSetName",?"DataSet1");
????????????writer.WriteElementString("Top",?".5in");
????????????writer.WriteElementString("Left",?".5in");
????????????writer.WriteElementString("Height",?".5in");
????????????writer.WriteElementString("Width",?(m_fields.Count?*?1.5)?+?"in");
????????????//?Table?Columns
????????????writer.WriteStartElement("TableColumns");
????????????for?(int?i?=?0;?i?<?m_fields.Count;?i++)
????????????{
????????????????writer.WriteStartElement("TableColumn");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteEndElement();?//?TableColumn
????????????}
????????????writer.WriteEndElement();?//?TableColumns
????????????//?Header?Row
????????????writer.WriteStartElement("Header");
????????????writer.WriteStartElement("TableRows");
????????????writer.WriteStartElement("TableRow");
????????????writer.WriteElementString("Height",?".25in");
????????????writer.WriteStartElement("TableCells");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("TableCell");
????????????????writer.WriteStartElement("ReportItems");
????????????????//?Textbox
????????????????writer.WriteStartElement("Textbox");
????????????????writer.WriteAttributeString("Name",?null,?"Header"?+?fieldName);
????????????????writer.WriteStartElement("Style");
????????????????writer.WriteElementString("TextDecoration",?"Underline");
????????????????writer.WriteEndElement();?//?Style
????????????????writer.WriteElementString("Top",?"0in");
????????????????writer.WriteElementString("Left",?"0in");
????????????????writer.WriteElementString("Height",?".5in");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteElementString("Value",?fieldName);
????????????????writer.WriteEndElement();?//?Textbox
????????????????writer.WriteEndElement();?//?ReportItems
????????????????writer.WriteEndElement();?//?TableCell
????????????}
????????????writer.WriteEndElement();?//?TableCells
????????????writer.WriteEndElement();?//?TableRow
????????????writer.WriteEndElement();?//?TableRows
????????????writer.WriteEndElement();?//?Header
????????????//?Details?Row
????????????writer.WriteStartElement("Details");
????????????writer.WriteStartElement("TableRows");
????????????writer.WriteStartElement("TableRow");
????????????writer.WriteElementString("Height",?".25in");
????????????writer.WriteStartElement("TableCells");
????????????foreach?(string?fieldName?in?m_fields)
????????????{
????????????????writer.WriteStartElement("TableCell");
????????????????writer.WriteStartElement("ReportItems");
????????????????//?Textbox
????????????????writer.WriteStartElement("Textbox");
????????????????writer.WriteAttributeString("Name",?null,?fieldName);
????????????????writer.WriteStartElement("Style");
????????????????writer.WriteEndElement();?//?Style
????????????????writer.WriteElementString("Top",?"0in");
????????????????writer.WriteElementString("Left",?"0in");
????????????????writer.WriteElementString("Height",?".5in");
????????????????writer.WriteElementString("Width",?"1.5in");
????????????????writer.WriteElementString("Value",?"=Fields!"?+?fieldName?+?".Value");
????????????????writer.WriteElementString("HideDuplicates",?"DataSet1");
????????????????writer.WriteEndElement();?//?Textbox
????????????????writer.WriteEndElement();?//?ReportItems
????????????????writer.WriteEndElement();?//?TableCell
????????????}
????????????//?End?Details?element?and?children???
????????????writer.WriteEndElement();?//?TableCells
????????????writer.WriteEndElement();?//?TableRow
????????????writer.WriteEndElement();?//?TableRows
????????????writer.WriteEndElement();?//?Details
????????????//?End?table?element?and?end?report?definition?file
????????????writer.WriteEndElement();?//?Table
????????????writer.WriteEndElement();?//?ReportItems
????????????writer.WriteEndElement();?//?Body
????????????writer.WriteEndElement();?//?Report
????????????//?Flush?the?writer?and?close?the?stream
????????????writer.Flush();
????????????stream.Close();
????????}
5.編譯運行你的程序,選擇Start Without Debugging.
然后一個rdl格式的報表文件就生成在你制定的目錄了,你只要在Report Services Project中添加這個報表進一步設(shè)計就可以了。
不過我們可以主要到GenerateRdl方法中的XML基本都是手動方式添加元素,如果把前面的SqlDataReader換成DataSet,那么GenerateRdl方法中的語句也要重寫,所以不是特別方便。
這里只是提供一種選擇,是好事壞,是否選擇,那就是使用者自己的事情了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/xiongeee/archive/2006/08/30/490201.html
總結(jié)
以上是生活随笔為你收集整理的本地生成RDL报表文件的创建工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端架构师神技,三招统一团队代码风格
- 下一篇: rangenet_lib tensor