I have a Gridview with some records which read from SQL Database, each record of Gridview has a button that use CommandName
and CommandArgument
with sending '<%#Eval("UserId")%>'
to detecting each record with calling them in code behind (CS).
I want to use entity command to when i click on the button (DO_PRINT(LinkButton)
), the crystal report pop up showing content of just same record.
UserId Name LastName OfficeId Print
100 Hassan Hosseini 1 DO_PRINT(LinkButton)
200 Brad Pitt 2 DO_PRINT(LinkButton)
You just need to set the href of the link to a page hosting a crystal report viewer showing a report and in page load of the page, setup data source using the entity Id that you receive from query string or route.
App_Data
folder, name it SampleDatabase
Add a new table to the sample database, name it 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
)
Add a few records to table. (Otherwise the GridView will not be shown).
SampleDatabase
Create a new page names Products.aspx
and add a new GridView
to the page using the following configs:
<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>
Load data into the grid, in the code behind:
protected void Page_Load(object sender, EventArgs e)
{
using (var db = new SampleDatabaseEntities())
{
var data = db.Prodcts.ToList();
GridView1.DataSource = data;
GridView1.DataBind();
}
}
Add a new Crystal Report to the project, name it ProductReport
:
Add a new page named Report.aspx
and drop an instance of the ReportViwer
to the page, using the default name CrystalReportViewer1
.
In the code behind of the Report.aspx
, get the report and the data to show in report:
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();
}
}
}
Note: In case you had some script error preventing the report viewer from showing, you can copy C:\inetpub\wwwroot\aspnet_client
folder to your project.