【发布时间】:2020-12-19 03:59:44
【问题描述】:
我有一个带有一个按钮和一个水晶报表查看器的网络表单。 Crystal 报表基于 MS SQL 存储过程并使用使用 SQL Server 身份验证的连接进行设计。 我注意到,如果我调用在页面加载中显示报告的方法,我的水晶报告会完美加载。但是,如果我通过单击按钮触发报告加载(我必须在部署时接受报告的参数),则会发生以下情况:
- 提示水晶报表参数(在没有回发的情况下加载报表时不会出现这种情况)。
- 加载第 1 页后,第 2 页导航提示登录数据库。如果不提供登录详细信息(通常只提供密码),则无法继续。此登录提示仅适用于报表的第 2 页。
为了规避这种情况,我创建了一个具有集成安全性的新连接,并且回发停止询问参数和数据库登录。不幸的是,我无法使用集成安全性来部署应用程序并寻求适当的解决方案或解决方法。
担心最坏的情况,我已经设计了具有相同要求的 RDLC 报表,但是,我发现我有更好的格式化选项,例如在使用 Crystal Report 时在子报表上画线以拆分列。
这是我到目前为止所尝试的
ASP 页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="c2.aspx.cs" Inherits="CrystalTest.c2" %>
<%@ Register Assembly="CrystalDecisions.Web, Version=13.0.4000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" Namespace="CrystalDecisions.Web" TagPrefix="CR" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" Text="Show Report" OnClick="Button1_Click" />
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="False" GroupTreeImagesFolderUrl="" Height="1202px" ReportSourceID="CrystalReportSource1" ToolbarImagesFolderUrl="" ToolPanelView="None" ToolPanelWidth="200px" Width="1104px" />
</div>
</form>
</body>
</html>
后面的代码
using CrystalDecisions.CrystalReports.Engine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CrystalTest
{
public partial class c2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//ShowReport();
}
private void ShowReport()
{
ReportDocument oRpt = new ReportDocument();
oRpt.Load(Server.MapPath(@"~/CrystalReport2.rpt"));
oRpt.SetParameterValue(0, 2020);
oRpt.SetParameterValue(1, 1);
oRpt.SetParameterValue(2, "3");
oRpt.SetParameterValue(3, "1");
oRpt.SetParameterValue(4, "1");
CrystalReportViewer1.Visible = true;
CrystalReportViewer1.ReportSource = oRpt;
//oRpt.SetDatabaseLogon("sa", "password", "RT04", "menass");
oRpt.DataSourceConnections[0].SetConnection("RT04", "menass", true);
}
protected void Button1_Click(object sender, EventArgs e)
{
ShowReport();
}
}
}
【问题讨论】:
标签: c# asp.net crystal-reports