搜档网
当前位置:搜档网 › 为Web应用场景开发报表

为Web应用场景开发报表

为Web应用场景开发报表
为Web应用场景开发报表

为Web应用场景开发报表

如需要开发Web(https://www.sodocs.net/doc/9613041162.html,)下的报表,可以使用ComponentOne Studio Enterprise开发套件中的C1WebReport控件。此控件封装了C1Report组件并且提供了一系列方法和属性来容易的为Web页面添加报表。C1WebReport控件无缝的兼容C1Report,并且提供了专为Web 场景设计的缓存和呈现选项。

仍然可以在Web程序中使用C1Report组件,但需要写额外的代码来创建报表的HTML或PDF版本。

在典型的Web场景,C1Report在服务器上以批处理或者按需创建报表。用户可以在客户端浏览器中选择报表然后查看或者打印报表。

静态Web报表

静态Web报表基于定期运行的创建预先定义的系列报表的服务器端程序。这些文件被网站的Web页面引用,并且可以像其他Web页面一样被客户端下载。

要实现此类型的程序,参照下列步骤:

1. 使用C1ReportDesigner程序来创建所有需要的报表。(参见使用C1ReportDesigner 阅读完成此步骤的详细信息。)

2. 在服务器上创建一个程序,包含一个C1Report组件。如果不想用form或window,使用CreateObject函数创建控件。

3.添加一个定期运行的程序,更新所有用户可见的报表。循环内容如下所示:

Visual Basic

' this runs every 6 hours:

' get a list of all reports in the definition file

sFile = "c:\inetpub\wwwroot\Reports\MyReports.xml" sList = c1r.GetReportInfo(sFile)

' refresh the reports on the server

For i = 0 TosList.Length – 1

c1r.Load(sFile, sList(i))

sFile = "Reports\Auto\" &sList(i) & ".htm"

c1r.RenderToFile(sFile, FileFormatEnum.HTMLPaged) Next

C#

// this runs every 6 hours:

// get a list of all reports in the definition file

sFile = "c:\inetpub\wwwroot\Reports\MyReports.xml"; sList = c1r.GetReportInfo(sFile);

// refresh the reports on the server

for ( i = 0 ; GAIS <= sList.Length – 1

c1r.Load(sFile, sList(i));

sFile = "Reports\Auto\" + sList(i) + ".htm";

c1r.RenderToFile(sFile, FileFormatEnum.HTMLPaged); }

代码用GetReportInfo方法获取在MyReport.xml报表定义文件(在第一步中创建)中包含的所有报表的列表,然后呈现每一个报表到分页的HTML文件中。(分页的HTML文件为原始报表中的每一页生成一个HTML页面,包含能够方便浏览的导航条。)

4.编辑HTML主页面,添加刚才保存的报表的链接。

不仅仅局限于HTML,C1Reort也可以导出为PDF文件,可以在任何浏览上用免费的插件查看。PDF格式在多方面优于HTML,特别是生成Web报表的硬拷贝的情况下。

动态Web报表

动态Web报表是按需创建的,还可能依赖于用户提供的数据。此种方案常常会通过https://www.sodocs.net/doc/9613041162.html,页面中的表单来向用户收集创建报表所需要的信息,然后创建一个C1Report组件来呈现报表到临时文件中,然后返回文件的引用地址。

下面的例子是一个简单的https://www.sodocs.net/doc/9613041162.html,页面,允许用户填写一些信息并且选择需要的报表类型。基于此,ASP代码创建了一个定制版本的NorthWind “Employee Sales by Country”报表,然后以用户选择的格式展现给用户。

此示例在服务器端使用临时文件来保存报表。在实际生产环境中,必须生成唯一的文件名并且在一段时间后将其删除,以避免报表在用户查看之前被覆盖。尽管如此,此示例演示了在Web上使用C1Report发布报表的主要技术。

按如下步骤来实现此类型的程序:

1. 从创建一个带有一个Web页面的Web程序开始,如下图所示:

页面包含五个服务器端控件:

_1stYear:包含有效年份的列表,具体数据为(1994,1995,和1996)。注意可以通过点击智能标签然后从菜单中选择Edit Items来添加项目。在ListItem Collection Editor对话框中添加三个新项目。

_txtGoal: 包含每一位员工的年度销售目标。

_btnHTML, _btnPDF: 用于将报表呈现到HTML或PDF然后显示结果的按钮。

_lblStatus: 在程序出错的情况下显示错误信息。

注:如果使用demo或beta版的C1Report来运行程序,将引发控件尝试在服务器端显示其About对话框的错误。如果发生了这样的情况,只需重新加载页面就能消除这个问题。

2. 配置完页面之后,需要在项目中添加对C1Report组件的引用。在Solution Explorer窗口右键点击项目,选择Add Reference然后选取C1Report组件。

3.添加Nwind.xml到项目的Data目录。右键点击Solution Explorer窗口中的项目,选择New Folder然后重命名目录为Data。然后右键点击这个目录,选择Add Existing Item然后选取

Nwind.xml报表定义文件。Nwind.xml文件默认安装在Documents或My Document文件夹下的ComponentOne Samples\Studio for

WinForms\C1Report\C1Report\VB\NorthWind\Data文件夹中。

4. 在项目中添加一个Temp目录。在Solution Explorer窗口中右键点击项目,选择New Folder然后重命名目录为Temp。

5. 如果使用传统的ASP,有一些有趣的事情。在控件上双击会打开代码窗口,可以写完整的代码去处理事件,与Windows Forms项目具有相同的编辑器和环境。

添加如下代码:

Visual Basic

Imports C1.C1Report

' handle user clicks

Private Sub _btnHTML_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnHTML.Click

RenderReport(FileFormatEnum.HTMLDrillDown)

End Sub

Private Sub _btnPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _btnPDF.Click

RenderReport(FileFormatEnum.PDF)

End Sub

C#

using C1.C1Report;

// handle user clicks

private void _btnHTML_Click(object sender, System.EventArgs e) {

RenderReport(FileFormatEnum.HTMLDrillDown);

}

private void _btnPDF_Click(object sender, System.EventArgs e) {

RenderReport(FileFormatEnum.PDF);

}

当用户点击任何一个按钮时,这些代码在服务器端运行。

6. 下列代码表达了程序的主要工作,RenderReport:

Visual Basic

Private Sub RenderReport(ByValfmt As FileFormatEnum)

' build file names

Dim rpt As String = "Employee Sales by Country"

Dim fileIn As String = GetDataPath() & "NWind.xml"

Dim ext As String = Iif(fmt = FileFormatEnum.PDF, ".pdf", ".htm")

Dim fileOut As String = GetOutputPath() &rpt&ext

Try

' create C1Report component

Dim c1r As New C1Report()

' load the report

c1r.Load(fileIn, rpt)

' get user parameters

Dim year As String = _lstYear.SelectedItem.Text

Dim goal As String = _txtGoal.Text

' customize the report data source

Dim sSQL As String = "SELECT DISTINCTROW "& _ "Employees.Country, https://www.sodocs.net/doc/9613041162.html,stName, "& _ "Employees.FirstName, Orders.ShippedDate, Orders.OrderID, "& _ " [Order Subtotals].Subtotal AS SaleAmount " & _

"FROM Employees INNER JOIN (Orders INNER JOIN " & _

" [Order Subtotals] ON Orders.OrderID = " & _

" [Order Subtotals].OrderID) " & _

" ONEmployees.EmployeeID = Orders.EmployeeID " & _ "WHERE Year(Orders.ShippedDate) = " & year & ";"

c1r.DataSource.RecordSource = sSQL

' customize the report's event handlers

Dim sScript As String = _

"If SalespersonTotal> " & goal &" Then" &vbCrLf& _

" ExceededGoalLabel.Visible = True" &vbCrLf& _

" SalespersonLine.Visible = True" &vbCrLf& _

"Else" &vbCrLf& _

" ExceededGoalLabel.Visible = False" &vbCrLf& _

" SalespersonLine.Visible = False" &vbCrLf& _

"End If"

c1r.Sections(SectionTypeEnum.GroupHeader2).OnPrint = sScript ' render the report into a temporary file

c1r.RenderToFile(fileOut, fmt)

' redirect user to report file

Response.Redirect("Temp/" + rpt + ext)

Catch x As Exception

_lblStatus.Text = "*** " &x.Message

End Try

End Sub

C#

// render the report

private void RenderReport(FileFormatEnumfmt)

{

// build file names

stringrpt = "Employee Sales by Country";

stringfileIn = GetDataPath() + "NWind.xml";

stringext = (fmt == FileFormatEnum.PDF)? ".pdf": ".htm"; stringfileOut = GetOutputPath() + rpt + ext;

try

{

// create C1Report component

C1Report c1r = new C1Report();

// load the report

c1r.Load(fileIn, rpt);

// get user parameters

string year = _lstYear.SelectedItem.Text;

string goal = _txtGoal.Text;

// customize the report data source

stringsSQL = "SELECT DISTINCTROW " +

"Employees.Country, https://www.sodocs.net/doc/9613041162.html,stName, " + "Employees.FirstName, Orders.ShippedDate, Orders.OrderID, " + " [Order Subtotals].Subtotal AS SaleAmount " +

"FROM Employees INNER JOIN (Orders INNER JOIN " +

" [Order Subtotals] ON Orders.OrderID = " +

" [Order Subtotals].OrderID) " +

" ONEmployees.EmployeeID = Orders.EmployeeID " +

"WHERE Year(Orders.ShippedDate) = " + year + ";";

c1r.DataSource.RecordSource = sSQL;

// customize the report's event handlers

stringsScript =

"If SalespersonTotal> " + goal + " Then \n" +

" ExceededGoalLabel.Visible = True\n" +

" SalespersonLine.Visible = True\n" +

"Else\n" +

" ExceededGoalLabel.Visible = False\n" +

" SalespersonLine.Visible = False\n" +

"End If";

c1r.Sections[SectionTypeEnum.GroupHeader2].OnPrint = sScript; // render the report into a temporary file

c1r.RenderToFile(fileOut, fmt);

// redirect user to report file

Response.Redirect("Temp/" + rpt + ext);

}

catch (Exception x)

{

_lblStatus.Text = "*** " + x.Message;

}

}

RenderReport程序比较长,但是也很简单。开头解决输入和输出文件的名字。所有文件的名字都相对于当前程序的目录。

接着,程序创建了一个C1Report组件然后载入“Employee Sales by Country”报表。这是一个初始的报表,在下一步将对它进行定制。

用户输入的参数可以从_lstYear和_txtGoal服务器端控件中得到。代码读取这些值然后使用它们来定制报表的RecordSource属性并且为OnPrint属性构建了一个VBScript处理程序。上一个章节中提及到这些技术。

一旦报表定义准备好了,代码就调用RenderToFile方法让C1Report组件写HTML或PDF文件到输出目录。在方法返回后,报表就可以被显示给用户了。

最后一步就是调用Response.Redirect,以在用户的浏览器上显示刚刚创建的报表。

注意所有的代码被包括在一个try/catch块中。如果在生成报表的时候发生任何错误,用户可以看见描述问题的错误信息。

7. 最后,需要添加一些简单的辅助程序:

Visual Basic

' get directories to use for loading and saving files

Private Function GetDataPath() As String

Return Request.PhysicalApplicationPath + "Data\"

End Function

Private Function GetOutputPath() As String

Return Request.PhysicalApplicationPath + "Temp\"

End Function

C#

// get directories to use for loading and saving files

private string GetDataPath()

{

returnRequest.PhysicalApplicationPath + @"Data\";

}

private string GetOutputPath()

{

returnRequest.PhysicalApplicationPath + @"Temp\";

}

8. 完成这些代码,程序就准备好了。可以按F5在Visual Studio中监视运行情况。下面的屏幕截图展示了程序在浏览器中显示的样子:

WEB开发技术实验报告

实验一JSP开发环境构建 实验目的:了解动态页面技术及B/S系统 掌握开发环境的构建 理解Eclipse开发WEB应用 实验内容: 实训项目一:安装JDK并配置环境变量 请阐述配置环境变量的方法: 实训项目二:安装TOMCAT并配置Server.xml修改端口号为8090 问题一:如何测试TOMCAT是否已经成功启动? 问题二:在浏览器地址栏输入什么地址可以访问到TOMCA T的测试页? 请阐述配置Server.xml修改端口号为8090基本实验步骤: 实训项目三:应用Eclipse建立项目并浏览一个JSP页面 请阐述应用Eclipse建立项目并浏览一个JSP页面基本实验步骤: 实验心得:(遇到了哪些问题,如何解决的,有那些体会) 实验二JSP语法 实验目的:了解JSP程序的组成元素 掌握JSP中使用JA V A程序片段的方法 实验内容: 实训项目一:编写一个JSP页面输出26个小写英文字母表 实训项目二:编写页面实现九九乘法表 实训项目三:利用成员变量被所有客户共享这一性质,实现一个简单的计数器 实训项目四:使用JA V A表达式输出系统当前时间 实训项目五:编写程序shijian2_9.jsp和computer.jsp两个页面,在第一个页面中使用include动作标记动态包含文件computer.jsp,并向它传递一个矩形的长和宽,computer.jsp 收到参数后,计算矩形的面积,并显示结果。 实训项目六:编写3个JSP页面:main.jsp,first.jsp和second.jsp,将3个JSP文件保存在同一个WEB工程中,main.jsp使用include动作标记加载first.jsp和second.jsp页面。First.jsp 页面可以画一张表格,second.jsp页面可以计算两个正整数的最大公约数。当first.jsp被加载时,获取main.jsp页面include动作标记的param子标记提供的表格行数和列数,当second.jsp 被加载时,获取main.jsp页面include动作标记的param子标记提供的两个正整数的值。 要求:上机编程完成上述实训项目,上机演示给教师检查,从中挑选三个程序的核心代码写在实训报告上 实验核心代码:

Web程序设计实验报告

Web程序设计实验报告 姓名:冯刚 学号:200905030324 班级:计科3班

Html代码: 1.首页代码 无标题文档