c# - 使用实体框架在 Crystal Reports 中显示 GridView 的一条记录
问题描述
设想:
我有一个 Gridview,其中包含一些从 SQL 数据库读取的记录,Gridview 的每条记录都有一个按钮,该按钮使用CommandName
和CommandArgument
发送'<%#Eval("UserId")%>'
以检测每条记录,并在代码后面(CS)中调用它们。
目标:
我想使用实体命令,当我单击按钮 ( DO_PRINT(LinkButton)
) 时,会弹出水晶报告,显示相同记录的内容。
像这样的网格视图:
UserId Name LastName OfficeId Print
100 Hassan Hosseini 1 DO_PRINT(LinkButton)
200 Brad Pitt 2 DO_PRINT(LinkButton)
先感谢您
解决方案
您只需将链接的 href 设置为托管显示报告的水晶报表查看器的页面,并在页面的页面加载中,使用您从查询字符串或路由收到的实体 ID 设置数据源。
带有实体框架的水晶报表 - 将数据传递给报表
- 创建 ASP.NET WebForms 项目
- 添加一个新的数据库到
App_Data
文件夹,命名它SampleDatabase
向示例数据库添加一个新表,将其命名为
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 )
向表中添加一些记录。(否则不会显示 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 Report,将其命名为
ProductReport
:- 添加新项目 → Crystal Reports → 使用报表向导/标准
- 然后从可用数据源:→项目数据→.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
文件夹复制到您的项目。
推荐阅读
- xmonad - 无法在 Xmonad 上设置亮度和媒体控制键
- r - 为特定的 R 列添加前缀
- flutter - 如何使用 Google Mock 测试颤振应用?
- serialization - Geode 客户端/服务器操作 - 保持数据序列化
- python - discord.py 无法在 dm 聊天中检索附件
- python - 从 3 个大型 tsv/csv 文件中提取和组合数据
- r - 如何为时间序列将变量从一个数据帧编码到另一个数据帧
- c# - 将图像文件从控制台应用程序发布到 API 作为 IFormFile 参数
- javascript - 如何使用 Javascript 仅更改一张图像
- c++ - 有没有办法告诉编译器某些函数的返回值不会改变?