XReport is an New Report tool ,it can read data from DB or XML Document . use this report tool , people can develop mostly report without programming code . so It 's finally aim is , Do it best to reduce go on errands for report development.
Use old report tools , peopel have to write many code for report , it bring on long time go on errands , spend many time to write and test code . append code to existent software system , increase project cost . It is time to change this complexion.
XRepot write in 100% C# , use DOTNET framework 1.1 , It include Report Designer and Report engine . Report engine can used in ASP.NET or WinForm Application .
In ASP.NET application ,you can use report engine like this :
//// Use XReport engine in ASP.NET//private void Page_Load(object sender, System.EventArgs e){ XDesigner.Report.ReportBuilder myBuilder = this.Session["builder"] as XDesigner.Report.ReportBuilder ; if( myBuilder == null ) { myBuilder = new XDesigner.Report.ReportBuilder(); using( System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection()) { conn.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\????\Designer\out\demomdb.mdb"; conn.Open(); myBuilder.DBConnection = conn ; // ???? myBuilder.Load( @"D:\????\Designer\out\????.xrp"); // ???? myBuilder.Refresh(); } this.Session["builder"] = myBuilder ; }
XDesigner.Report.ReportHtmlBuilder rb = myBuilder.CreateHtmlBuilder(); rb.Indent = true;
string strUrl = this.Request.Url.AbsoluteUri ; int index = strUrl.IndexOf('?'); if( index > 0 ) strUrl = strUrl.Substring( 0 , index ); rb.ImgSrcFormatString = strUrl + "?imageindex={0}"; rb.Refresh(); if( this.Request.QueryString["imageindex"] != null ) { rb.SaveReportImage( Convert.ToInt32( this.Request.QueryString["imageindex"]) , this.Response.OutputStream , System.Drawing.Imaging.ImageFormat.Png ); return ; }
if( this.Request.QueryString["out"] == "doc") { // ???Word?? rb.SaveWordDocument( this.Response.OutputStream ); this.Response.AppendHeader("Content-Disposition","attachment;filename=" + System.Web.HttpUtility.UrlEncode( myBuilder.ReportTitle ) + ".doc"); } else if( this.Request.QueryString["out"] == "xls") { // ??? Excel ?? rb.SaveExcelDocument( this.Response.OutputStream ); this.Response.AppendHeader("Content-Disposition","attachment;filename=" + System.Web.HttpUtility.UrlEncode( myBuilder.ReportTitle ) + ".xls"); } else rb.Save( this.Response.Output );}In console application , you can use report engine like this.
/// <summary>/// ?????????/// </summary>public static System.Collections.Specialized.NameValueCollection myArgs = new System.Collections.Specialized.NameValueCollection();
/// <summary>/// ?????/// </summary>[STAThread]static void Main() { try { // ????????? AnalyseArgs( System.Environment.GetCommandLineArgs()); // ?????????? string strFileName = myArgs["commandfile"]; if( strFileName != null && System.IO.File.Exists( strFileName )) { System.Collections.ArrayList myList = new System.Collections.ArrayList(); using( System.IO.StreamReader myReader = new System.IO.StreamReader( strFileName , System.Text.Encoding.GetEncoding( 936 ))) { string strLine = myReader.ReadLine(); while( strLine != null ) { myList.Add( strLine ); strLine = myReader.ReadLine(); } myReader.Close(); } AnalyseArgs( myList ); }
bool bolPrompt = ! ( myArgs["prompt"] == "0"); System.Data.IDbConnection myConn = null; string strConn = myArgs["connection"] ; if( strConn != null && strConn.Length > 0 ) { myConn = new System.Data.OleDb.OleDbConnection( strConn ); myConn.Open(); } XDesigner.Report.ReportBuilder builder = new XDesigner.Report.ReportBuilder(); builder.DBConnection = myConn; foreach( string strKey in myArgs.Keys ) { if( strKey.StartsWith("var:")) builder.SetVariable( strKey.Substring( 4 ) , myArgs[ strKey ] ); } strFileName = myArgs["filename"] ; if( strFileName != null && System.IO.File.Exists( strFileName )) { builder.Load( strFileName ); builder.Refresh(); } if( myConn != null) myConn.Close();
if( myArgs["print"] == "1") { string strPageIndex = myArgs["pageindex"]; if( strPageIndex != null && strPageIndex.Length > 0 ) builder.PrintSpecialPage( bolPrompt , Convert.ToInt32( strPageIndex )); else builder.PrintDocument( bolPrompt ); } } catch( Exception ext) { System.Windows.Forms.MessageBox.Show( null , "????:" + ext.Message , "????" , System.Windows.Forms.MessageBoxButtons.OK , System.Windows.Forms.MessageBoxIcon.Exclamation ); }}//static void Main()
private static void AnalyseArgs( System.Collections.IEnumerable args ){ if( args == null ) return ; foreach( string strArg in args ) { if( strArg != null && strArg.Length > 0 ) { int index = strArg.IndexOf('='); if( index > 0 ) { string strName = strArg.Substring( 0 , index ); string strValue = strArg.Substring( index + 1 ); myArgs[ strName.Trim() ] = strValue.Trim(); } } }}
Learn more information about XReport , please visit http://www.xdesigner.cn or Email [email protected] .