使用 Entity Framework 在 Crystal 报告中显示 GridView 的一条记录

Show one record of GridView in Crystal Reports using Entity Framework

场景:

我有一个 Gridview,其中包含一些从 SQL 数据库读取的记录,Gridview 的每条记录都有一个按钮,该按钮使用 CommandNameCommandArgument 发送 '<%#Eval("UserId")%>' 到通过在代码隐藏 (CS) 中调用它们来检测每条记录。

目标:

我想在单击按钮 (DO_PRINT(LinkButton)) 时使用实体命令,弹出 crystal 报告显示相同记录的内容。

像这样的网格视图:

UserId    Name   LastName   OfficeId    Print
100       Hassan Hosseini      1        DO_PRINT(LinkButton)
200       Brad   Pitt          2        DO_PRINT(LinkButton)

提前致谢

您只需将 link 的 href 设置为托管显示报告的 crystal 报告查看器的页面,并在页面的页面加载中使用实体 ID 设置数据源您从查询字符串或路由收到。

Crystal 报告 Entity Framework - 将数据传递给报告

  1. 创建一个 ASP.NET WebForms 项目
  2. 将新数据库添加到 App_Data 文件夹,将其命名为 SampleDatabase
  3. 在示例数据库中添加一个新的table,命名为Products:

    CREATE TABLE [dbo].[Prodcts]
    (
        [Id] INT NOT NULL PRIMARY KEY IDENTITY(1,1),
        [Name] NVARCHAR(50) NOT NULL, 
        [Price] INT NOT NULL,
        [Description] NVARCHAR(500) NULL
    )
    
  4. 添加几条记录到table。 (否则不会显示GridView)。

  5. 向您的项目添加一个新的实体数据模型并将其命名为SampleDatabase
  6. 使用以下配置创建新页面名称 Products.aspx 并向页面添加新 GridView

    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField  DataField="Name" HeaderText="Name"/>
            <asp:BoundField  DataField="Price" HeaderText="Price"/>
            <asp:BoundField  DataField="Description" HeaderText="Description"/>
            <asp:HyperLinkField
                DataNavigateUrlFields="Id"
                DataNavigateUrlFormatString="~\Report.aspx?Id={0}"
                HeaderText="Report"
                Text="Report" />
        </Columns>
    </asp:GridView>
    
  7. 加载数据到网格中,在后面的代码中:

    protected void Page_Load(object sender, EventArgs e)
    {
        using (var db = new SampleDatabaseEntities())
        {
            var data = db.Prodcts.ToList();
            GridView1.DataSource = data;
            GridView1.DataBind();
        }
    }
    
  8. 在项目中添加一个新的Crystal报表,命名为ProductReport:

    • 添加新项目 → Crystal 报告 → 使用报告向导/标准
    • 然后从可用数据源:→ 项目数据 → .NET 对象 → 查找并选择产品并将其添加到右侧面板
    • 然后按照向导操作
  9. 添加一个名为 Report.aspx 的新页面,并将 ReportViwer 的实例拖放到该页面,使用默认名称 CrystalReportViewer1.

  10. Report.aspx后面的代码中,获取报告和要在报告中显示的数据:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (int.TryParse(Request.QueryString["id"], out int id))
        {
            using (var db = new SampleDatabaseEntities())
            {
                var report = new ProductReport();
                var data = db.Prodcts.Where(x => x.Id == id).ToList();
                report.SetDataSource(data);
                CrystalReportViewer1.ReportSource = report;
                CrystalReportViewer1.RefreshReport();
            }
        }
    }
    

注意:如果您有一些脚本错误导致报表查看器无法显示,您可以将 C:\inetpub\wwwroot\aspnet_client 文件夹复制到您的项目。