在本节中,将编写代码以使用非嵌入式报表的列表来填充 DropDownList 控件。将使用 getReports() 帮助器方法通过 Crystal Reports Web 服务来生成报表列表,然后将此列表绑定到 DropDownList 控件。
对于 Windows 项目,请参见填充在 Windows 项目中的 ComboBox 控件。
填充在网站中的 DropDownList 控件
在此过程中,将使用 Crystal Reports Web 服务来填充报表的排序列表。
打开 Web 窗体。
从“视图”菜单中,单击“代码”。
在类签名上,在类顶部为 System.IO 和 System.Collections 命名空间添加
"Imports"[Visual Basic]或"using"[C#]声明。[Visual Basic]
Imports System.IO Imports System.Collections
[C#]
using System.IO; using System.Collections;
在
page_load()事件处理程序中,创建一个Not IsPostBack条件块。[Visual Basic]
If Not IsPostBack Then Else End If
[C#]
if(!IsPostBack) { } else { }**注意 **Not IsPostBack 条件块用于封装只应在首次加载页面时才运行的代码。在 Not IsPostBack 条件块中,控件通常都绑定到数据值,这样它们的数据值(以及所有后续控件事件)才不会在重新加载页面时重置。
在
If块内部,使用getReports()帮助器方法从 Web 服务中检索报表列表。将结果分配给一个 ArrayList。[Visual Basic]
Dim myReports As ArrayList = getReports()
[C#]
ArrayList reports = getReports();
在下一行,实例化
SortedList类并将它传递给其父界面IDictionary。[Visual Basic]
Dim mySortedList As IDictionary = New SortedList
[C#]
IDictionary sortedList = new SortedList();
下一步,创建
For Each循环,此循环在reports的每个元素间循环。[Visual Basic]
For Each myPath As String In myReports Next
[C#]
foreach (string path in reports) { }下一个代码块使用字符串处理方法,从每个报表的名称中删除文件路径,并使用字符串字面值替换转义符。将这些行插入到
For Each循环内。[Visual Basic]
Dim myReportNamePrefix As Integer = myPath.LastIndexOf("/") + 1 Dim myReportNameSufix As Integer = myPath.LastIndexOf("?") Dim myReportNameLength As Integer = myReportNameSufix - myReportNamePrefix Dim myReportName As String = myPath.Substring(myReportNamePrefix, myReportNameLength) reportName = reportName.Replace("%20", " ")[C#]
int reportNamePrefix = path.LastIndexOf(@"/") + 1; int reportNameSufix = path.LastIndexOf(@"?"); int reportNameLength = reportNameSufix - reportNamePrefix; string reportName = path.Substring(reportNamePrefix, reportNameLength); myReportName = myReportName.Replace("%20", " ");仍然在
For Each循环中添加一行代码,该行代码将截断的报表名称添加到sortedListIDictionary。[Visual Basic]
mySortedList.Add(myPath, myReportName)
[C#]
sortedList.Add(path, reportName);
将已排序的列表绑定到 DropDownList 控件
在本节中,您将了解如何将 IDictionary 数据源绑定到 DropDownList 控件。首先,定义 IDictionary 集合的元素与 DropDownList 字段之间的关系。然后,将 IDictionary 数据源绑定到 DropDownList 控件。
?
For Each????,??????DropDownList? Value ?????sortedList??? Key ???[Visual Basic]
reportsList.DataTextField = "value"
[C#]
reportsList.DataTextField = "value";
???,?
DropDownList??? Value ?????sortedList??? Key ???[Visual Basic]
reportsList.DataValueField = "key"
[C#]
reportsList.DataValueField = "key";
?
SortedList?????DropDownList???dataSource???[Visual Basic]
reportsList.DataSource = mysortedList
[C#]
reportsList.DataSource = sortedList;
最后,将数据源绑定到
DropDownList。[Visual Basic]
reportsList.DataBind()
[C#]
reportsList.DataBind();
现在您完成了
If Not IsPostBack条件块的内容。在下一节中,将在Else条件块内编写代码以定义刷新页面而未给ServerFileReport实例分配新值时所发生的情况。在 else 语句内部,将 ServerFileReport 实例分配给会话中当前保存的报表。
[Visual Basic]
myServerFileReport = CType(Session("myServerFileReport"), ServerFileReport)[C#]
serverFileReport = (ServerFileReport)Session["serverFileReport"];
**注意 **由于 Session 只返回一般对象,您必须将报表转换为报表类型。无论您使用嵌入式报表还是非嵌入式报表,都要将检索到的对象转换为 ServerFileReport 类型。
在下一行上,将 ServerFileReport 实例绑定到 CrystalReportViewer 控件。
[Visual Basic]
myCrystalReportViewer.ReportSource = myServerFileReport
[C#]
crystalReportViewer.ReportSource = serverFileReport;
从“文件”菜单中选择“全部保存”。
从“生成”菜单中选择“生成解决方案”。
如果生成过程中出错,请立即纠正。
在下一节中,将添加一个 click 事件,根据 reportsList DropDownList 控件中选择的内容来绑定报表。
继续到添加 Click 事件以绑定报表.
请参见
© 2005 Business Objects SA. All Rights Reserved
| Business Objects http://www.china.businessobjects.com/ や穿狝叭 http://www.china.businessobjects.com/BOindex/support/ |