使用 Entity Framework 在 Crystal 报告中显示 GridView 的一条记录
Show one record of GridView in Crystal Reports using Entity Framework
场景:
我有一个 Gridview,其中包含一些从 SQL 数据库读取的记录,Gridview 的每条记录都有一个按钮,该按钮使用 CommandName
和 CommandArgument
发送 '<%#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 - 将数据传递给报告
- 创建一个 ASP.NET WebForms 项目
- 将新数据库添加到
App_Data
文件夹,将其命名为 SampleDatabase
在示例数据库中添加一个新的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
)
添加几条记录到table。 (否则不会显示GridView)。
- 向您的项目添加一个新的实体数据模型并将其命名为
SampleDatabase
使用以下配置创建新页面名称 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>
加载数据到网格中,在后面的代码中:
protected void Page_Load(object sender, EventArgs e)
{
using (var db = new SampleDatabaseEntities())
{
var data = db.Prodcts.ToList();
GridView1.DataSource = data;
GridView1.DataBind();
}
}
在项目中添加一个新的Crystal报表,命名为ProductReport
:
- 添加新项目 → Crystal 报告 → 使用报告向导/标准
- 然后从可用数据源:→ 项目数据 → .NET 对象 → 查找并选择产品并将其添加到右侧面板
- 然后按照向导操作
添加一个名为 Report.aspx
的新页面,并将 ReportViwer
的实例拖放到该页面,使用默认名称 CrystalReportViewer1
.
在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
文件夹复制到您的项目。
场景:
我有一个 Gridview,其中包含一些从 SQL 数据库读取的记录,Gridview 的每条记录都有一个按钮,该按钮使用 CommandName
和 CommandArgument
发送 '<%#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 - 将数据传递给报告
- 创建一个 ASP.NET WebForms 项目
- 将新数据库添加到
App_Data
文件夹,将其命名为SampleDatabase
在示例数据库中添加一个新的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 )
添加几条记录到table。 (否则不会显示GridView)。
- 向您的项目添加一个新的实体数据模型并将其命名为
SampleDatabase
使用以下配置创建新页面名称
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>
加载数据到网格中,在后面的代码中:
protected void Page_Load(object sender, EventArgs e) { using (var db = new SampleDatabaseEntities()) { var data = db.Prodcts.ToList(); GridView1.DataSource = data; GridView1.DataBind(); } }
在项目中添加一个新的Crystal报表,命名为
ProductReport
:- 添加新项目 → Crystal 报告 → 使用报告向导/标准
- 然后从可用数据源:→ 项目数据 → .NET 对象 → 查找并选择产品并将其添加到右侧面板
- 然后按照向导操作
添加一个名为
Report.aspx
的新页面,并将ReportViwer
的实例拖放到该页面,使用默认名称CrystalReportViewer1
.在
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
文件夹复制到您的项目。