如何在ASP.NET中使用实体方法在Crystal Report中显示Gridview中一条记录的内容

问题描述 投票:-1回答:1

场景:

我有一个Gridview,其中包含一些从SQL数据库读取的记录,Gridview的每个记录都有一个按钮,该按钮使用CommandNameCommandArgument发送'<%#Eval("UserId")%>'来检测每个记录,并在后面的代码(CS)中进行调用。

目标:

当我单击按钮(DO_PRINT(LinkButton))时,我想使用实体命令,弹出的水晶报表将显示相同记录的内容。

像这样的Gridview:

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

提前谢谢您

c# asp.net entity-framework crystal-reports entity-framework-6
1个回答
0
投票

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

带有实体框架的水晶报表-将数据传递到报表

  1. 创建ASP.NET WebForms项目
  2. 将新数据库添加到App_Data文件夹,将其命名为SampleDatabase
  3. 向示例数据库添加新表,将其命名为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. 向您的项目添加一个新的实体数据模型并将其命名为SampleDatabase(我使用EF 6.x,设置为复数/唯一名称)

  5. 使用以下配置创建一个新的页面名称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>
    
  6. 将数据加载到网格中,在后面的代码中:

    protected void Page_Load(object sender, EventArgs e)
    {
        using (var db = new SampleDatabaseEntities())
        {
            var data = db.Prodcts.ToList();
            GridView1.DataSource = data;
            GridView1.DataBind();
        }
    }
    
  7. 向项目添加一个新的Crystal Report,将其命名为ProductReport

    • 添加新项→Crystal报表→使用报表向导/标准
    • 然后从可用数据源中:→项目数据→.NET对象→查找并选择产品并将其添加到右侧面板中
    • 然后跟随向导
  8. 添加一个名为Report.aspx的新页面,并使用默认名称ReportViwerCrystalReportViewer1的实例拖放到该页面。

  9. 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();
            }
        }
    }
    
© www.soinside.com 2019 - 2024. All rights reserved.