65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SqlDataSource 控件将参数绑定到 Crystal Report——一种简化的代码方法

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.48/5 (10投票s)

2007年8月17日

2分钟阅读

viewsIcon

53288

downloadIcon

446

Crystal Reports 中参数绑定的简化代码方法

源代码: ASPNET_20_SampleProjects.zip

引言

互联网上有许多关于使用 CrystalReportViewer、CrystalReportSource 和 Crystal Report 设计器进行数据绑定的文章。 一些示例使用了简化的代码方法,而另一些示例则展示了如何使用 CR 对象模型来执行相同的操作。 我展示了一种简化的代码方法,将 UI 元素绑定到 CrystalReportViewer,以使用 SqlDataSource 控件显示底层报表。

背景

要创建一个 Crystal Report,该报表使用来自数据库的数据,并使用表示层 UI 元素中的过滤值,我们可以使用以下方法

  1. 使用数据库中的存储过程创建 CR; 在 ASPX 页面的代码隐藏中创建一个 datatable,该页面使用 CrystalReportViewer 控件显示 CR,并将 datatable 绑定到报表。
  2. 使用数据库中的存储过程创建 CR; 使用报表对象模型中的 parameters 集合,以编程方式将报表参数绑定到 UI 元素的值。
  3. 将参数绑定到 CR 的另一种方法是使用 SqlDataSource 控件作为底层报表的数据源的简化代码方法。

Using the Code

为了演示这种方法,我们将使用 Northwind 数据库附带的 CustOrderHist 存储过程。

创建一个新的 CR 以使用 CustOrderHist 存储过程显示数据。

  1. 在 Visual Studio 2005 中创建 CustOrderHistory.rpt,并在创建新的数据库连接后按照向导选择 CustOrderHist 存储过程。
  2. 选择 ProductName 和 Total 作为要显示的报表字段。

创建一个 ASPX 页面并将 CrystalReportViewer 控件绑定到 Crystal Report

  1. 将 SqlDataSource 控件拖放到 ASPX 页面上,切换到页面设计器并使用智能标记配置数据源。 在步骤 1 和 2 之后,您将看到生成的标记如下所示
  2. 使用查询生成器并从 Customers 表中选择 CustomerID 和 CompanyName 列。
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
    SelectCommand="SELECT [CustomerID], [CompanyName] FROM [Customers]" 
    SelectCommandType="Text"> 
    </asp:SqlDataSource>
  3. 将 DropDownList 控件拖放到 ASPX 页面上,切换到页面设计器并使用智能标记选择在上一步中创建的 SqlDataSource 作为数据源。 选择 CustomerID 作为 DataValueField,CompanyName 作为 DataTextField。

    在步骤 3 之后,您将看到生成的标记如下所示。

    <asp:DropDownList ID="DropDownList1" runat="server" 
    AutoPostBack="True" DataSourceID="SqlDataSource1" 
    DataTextField="CompanyName" DataValueField="CustomerID"
        AppendDataBoundItems="true"> 
    <asp:ListItem Text="-- Customer Order History --" Value="NULL" /> 
    </asp:DropDownList> 
    
  4. 拖放 CrystalReportSource 控件和 CrystalReportViewer 控件,切换到页面设计器并配置 CRS 以选择 CustOrderHistory.rpt 作为报表源。 然后配置 CRV 以选择创建的 CrystalReportSource1 控件作为报表源。
  5. 打开 CrystalReportSource1 控件的属性窗口,然后选择 SqlDataSource1 控件作为数据源之一。 在步骤 4 和 5 之后,您将看到生成的标记如下所示。
    <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" 
        AutoDataBind="true" ReuseParameterValuesOnRefresh="True" 
        DisplayGroupTree="False" ReportSourceID="CrystalReportSource1" />
    
    <CR:CrystalReportSource ID="CrystalReportSource1" runat="server" 
        OnDataBinding="CrystalReportSource1_DataBinding" 
        OnInit="CrystalReportSource1_Init" OnLoad="CrystalReportSource1_Load"
        OnPreRender="CrystalReportSource1_PreRender" 
        OnUnload="CrystalReportSource1_Unload"> 
    <Report FileName="Reports\CustOrderHistory.rpt"> 
    <DataSources> 
    <CR:DataSourceRef DataSourceID="SqlDataSource2" 
        TableName="CustOrderHist;1" /> 
    </DataSources> 
    </Report> 
    </CR:CrystalReportSource>
    
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
    SelectCommand="CustOrderHist" SelectCommandType="StoredProcedure"
        OnSelecting="SqlDataSource2_Selecting"> 
    <SelectParameters> 
    <asp:ControlParameter ControlID="DropDownList1" Name="CustomerID"
        PropertyName="SelectedValue" /> 
    </SelectParameters> 
    </asp:SqlDataSource>
  6. 进入代码隐藏文件和 ASPX 页面并添加以下代码。
    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Collections; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Web.UI.HtmlControls; 
    using CrystalDecisions.CrystalReports.Engine; 
    using CrystalDecisions.Enterprise; 
    using CrystalDecisions.ReportSource; 
    using CrystalDecisions.Shared; 
    using CrystalDecisions.Web; 
    public partial class CRParameters : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
        } 
        protected void SqlDataSource2_Selecting(object sender, 
            SqlDataSourceSelectingEventArgs e) 
        { 
            if (Page.IsPostBack == false) 
            { 
                e.Command.Parameters["@CustomerID"].Value = DBNull.Value; 
            } 
        }
© . All rights reserved.