单击 DataGridView 中的链接按钮时如何调用 crystal 报表查看器?
How can i call crystal report viewer when Click linkbutton within DataGridView?
我使用 datagridview 创建了一个订单网络表单,我还使用 crystal 报告创建了一个报告。我还在同一页面上放置了 crystalreportviewer。
这是 webform 和 datagridview 的 gridview 列列表:
<asp:GridView ID="GridViewHome" runat="server" AllowPaging="True" AutoGenerateColumns="false" BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4" OnPageIndexChanging="GridViewHome_PageIndexChanging">
<Columns>
<asp:TemplateField>
<HeaderTemplate>Patient MRN#</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblpatient" runat="server" Text='<%# Eval("Patient No") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Order Number</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblorder" runat="server" Text='<%# Eval("Request number") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Patient Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblname" runat="server" Text='<%# Eval("Patient Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Req. Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblreqd" runat="server" Text='<%# Eval("Request Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Report Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblrepd" runat="server" Text='<%# Eval("Report Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Test Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Test_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Result</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="result" runat="server" Text='<%# Eval("Result") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Ref.Range From</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Reflow" runat="server" Text='<%# Eval("Low Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>To</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="refhigh" runat="server" Text='<%# Eval("High Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Text Range</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="textrange" runat="server" Text='<%# Eval("Text Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>REQ. FORM NO.</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="req" runat="server" Text='<%# Eval("REQ FORM NUMBER") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Dept.Id</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="deptid" runat="server" Text='<%# Eval("DEPT ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Department</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="deptname" runat="server" Text='<%# Eval("Department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Options</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="Lnkresult" runat="server" OnClick="Lnkresult_Click">Print Result</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
这是网格视图图片:
我希望在按下 link 按钮(打印结果)时根据 OrderNum 和 deptid 参数在数据网格视图中显示报告。
我创建了 link 按钮并使用了以下代码:
protected void Lnkresult_Click(object sender, EventArgs e)
{
GridViewRow iRow = ((GridViewRow)((LinkButton)sender).NamingContainer);
//Assuming you first column is where your "lblOrder" is.
int OrderNum = Convert.ToInt32(((Label)iRow.Cells[1].Controls[1]).Text);
int Deptid = Convert.ToInt32(((Label)iRow.Cells[11].Controls[1]).Text);
ReportDocument myReportDocument;
myReportDocument = new ReportDocument();
myReportDocument.Load(Server.MapPath("~/RPT/RPT_RESULTS.rpt"));
myReportDocument.SetParameterValue("@ORDER_ID", OrderNum);
myReportDocument.SetParameterValue("@deptid", Deptid);
myReportDocument.SetDatabaseLogon("username", "password");
CrystalReportViewer1.ReportSource = myReportDocument;
CrystalReportViewer1.DisplayToolbar = true;
}
但是当我点击 link 按钮时它没有显示报告我的代码有什么错误?
您可以在您的数据网格视图中添加超链接并调用您的网络表单并将参数发送到您的 crystal 报告查看器,方法是使用以下代码:
<asp:TemplateField>
<HeaderTemplate>Options</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" NavigateUrl='<%#"/RPT/WebForm1.aspx?order_id=" +Eval("Request number")+"&DEPT ID=" +Eval("DEPT ID")+"&Test Id=" +Eval("Test Id")%>' runat="server">Print Result</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
并在 webform 的页面加载中创建文本框 2 或 3 或 4 的数量取决于您的参数然后在页面加载中使用此代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TXTORDERID.Text = Request.QueryString["order_id"].ToString();
TXTDEPTID.Text = Request.QueryString["DEPT ID"].ToString();
TXTTESTID.Text = Request.QueryString["Test Id"].ToString();
ReportDocument reportDocument = new ReportDocument();
ParameterFields paramFields = new ParameterFields();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@ORDER_ID";
paramDiscreteValue.Value = TXTORDERID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
paramField = new ParameterField();
paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@deptid";
paramDiscreteValue.Value = TXTDEPTID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
reportDocument.Load(Server.MapPath("~/RPT/RPT_RESULT.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("DBA", "2006");
}
}
我使用 datagridview 创建了一个订单网络表单,我还使用 crystal 报告创建了一个报告。我还在同一页面上放置了 crystalreportviewer。
这是 webform 和 datagridview 的 gridview 列列表:
<asp:GridView ID="GridViewHome" runat="server" AllowPaging="True" AutoGenerateColumns="false" BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4" OnPageIndexChanging="GridViewHome_PageIndexChanging">
<Columns>
<asp:TemplateField>
<HeaderTemplate>Patient MRN#</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblpatient" runat="server" Text='<%# Eval("Patient No") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Order Number</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblorder" runat="server" Text='<%# Eval("Request number") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Patient Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblname" runat="server" Text='<%# Eval("Patient Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Req. Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblreqd" runat="server" Text='<%# Eval("Request Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Report Date</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblrepd" runat="server" Text='<%# Eval("Report Date") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Test Name</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="LblTest" runat="server" Text='<%# Eval("Test_Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Result</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="result" runat="server" Text='<%# Eval("Result") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Ref.Range From</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Reflow" runat="server" Text='<%# Eval("Low Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>To</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="refhigh" runat="server" Text='<%# Eval("High Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Text Range</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="textrange" runat="server" Text='<%# Eval("Text Range") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>REQ. FORM NO.</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="req" runat="server" Text='<%# Eval("REQ FORM NUMBER") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Dept.Id</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="deptid" runat="server" Text='<%# Eval("DEPT ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Department</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="deptname" runat="server" Text='<%# Eval("Department") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<HeaderTemplate>Options</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton ID="Lnkresult" runat="server" OnClick="Lnkresult_Click">Print Result</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
这是网格视图图片:
我希望在按下 link 按钮(打印结果)时根据 OrderNum 和 deptid 参数在数据网格视图中显示报告。
我创建了 link 按钮并使用了以下代码:
protected void Lnkresult_Click(object sender, EventArgs e)
{
GridViewRow iRow = ((GridViewRow)((LinkButton)sender).NamingContainer);
//Assuming you first column is where your "lblOrder" is.
int OrderNum = Convert.ToInt32(((Label)iRow.Cells[1].Controls[1]).Text);
int Deptid = Convert.ToInt32(((Label)iRow.Cells[11].Controls[1]).Text);
ReportDocument myReportDocument;
myReportDocument = new ReportDocument();
myReportDocument.Load(Server.MapPath("~/RPT/RPT_RESULTS.rpt"));
myReportDocument.SetParameterValue("@ORDER_ID", OrderNum);
myReportDocument.SetParameterValue("@deptid", Deptid);
myReportDocument.SetDatabaseLogon("username", "password");
CrystalReportViewer1.ReportSource = myReportDocument;
CrystalReportViewer1.DisplayToolbar = true;
}
但是当我点击 link 按钮时它没有显示报告我的代码有什么错误?
您可以在您的数据网格视图中添加超链接并调用您的网络表单并将参数发送到您的 crystal 报告查看器,方法是使用以下代码:
<asp:TemplateField>
<HeaderTemplate>Options</HeaderTemplate>
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" NavigateUrl='<%#"/RPT/WebForm1.aspx?order_id=" +Eval("Request number")+"&DEPT ID=" +Eval("DEPT ID")+"&Test Id=" +Eval("Test Id")%>' runat="server">Print Result</asp:HyperLink>
</ItemTemplate>
</asp:TemplateField>
并在 webform 的页面加载中创建文本框 2 或 3 或 4 的数量取决于您的参数然后在页面加载中使用此代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
TXTORDERID.Text = Request.QueryString["order_id"].ToString();
TXTDEPTID.Text = Request.QueryString["DEPT ID"].ToString();
TXTTESTID.Text = Request.QueryString["Test Id"].ToString();
ReportDocument reportDocument = new ReportDocument();
ParameterFields paramFields = new ParameterFields();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@ORDER_ID";
paramDiscreteValue.Value = TXTORDERID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
paramField = new ParameterField();
paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@deptid";
paramDiscreteValue.Value = TXTDEPTID.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
CrystalReportViewer1.ParameterFieldInfo = paramFields;
CrystalReportViewer1.ReuseParameterValuesOnRefresh = true;
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
reportDocument.Load(Server.MapPath("~/RPT/RPT_RESULT.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("DBA", "2006");
}
}