У меня есть веб-приложение, которое я разработал и которое использует Crystal Reports 13.0.19 для VS 2013. Отчеты на моем компьютере работают нормально, но при публикации веб-приложения при загрузке отчета появляется следующая ошибка:
Object reference not set to an instance of an object.
Мой код ReportViewer:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache);
try
{
_rptFile = (ReportDocument)Session[SessionInfo.ReportFile];
var hParametre = (Hashtable)Session[SessionInfo.ReportParam];
var param = new ParameterValues();
var val = new ParameterDiscreteValue();
foreach (ParameterFieldDefinition obj in _rptFile.DataDefinition.ParameterFields)
{
if (hParametre.ContainsKey(obj.Name))
{
val.Value = hParametre[obj.Name].ToString();
param.Add(val);
obj.ApplyCurrentValues(param);
}
}
CrystalReportViewer1.ToolPanelView = CrystalDecisions.Web.ToolPanelViewType.None;
CrystalReportViewer1.ReportSource = _rptFile;
// _rptFile.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "ExportedReport");
Session.Remove(SessionInfo.ReportFile);
Session.Remove(SessionInfo.ReportParam);
Session[SessionInfo.ReportFile] = _rptFile;
}
catch (Exception ex)
{
lblMessage.Text = ex.Message;
}
}
else if (Session[SessionInfo.ReportFile] != null)
{
_rptFile = (ReportDocument)Session[SessionInfo.ReportFile];
CrystalReportViewer1.ReportSource = _rptFile;
}
}
Эта функция будет вызывать
DataSet1 _ds = new DataSet1();
ReportDocument _rptdoc = new ReportDocument();
private string _rptPath = "";
public string PrintReport(string reportFileName, string dataTableName, string parameterName, string procedureName, string titleName, string dateRange, string dataReadBy)
{
_rptdoc = new ReportDocument();
_ds = new DataSet1();
_rptPath = System.Web.HttpContext.Current.Server.MapPath("~/Report/ReportFile/" + reportFileName + "");
_rptdoc.Load(_rptPath);
new DbConnection().GetDataFromProc(_ds.Tables["" + dataTableName + ""], "" + parameterName + "", "" + procedureName + "", dataReadBy);
_rptdoc.SetDataSource(_ds.Tables["" + dataTableName + ""]);
_rptdoc.SetDataSource(_ds.Tables["" + dataTableName + ""].DefaultView);
var hParameter = new Hashtable();
new DbConnection().AddParameters(hParameter, ReturnFieldValue("tbl_COMPANY_INFORMATION", "", "Name"), ReturnFieldValue("tbl_COMPANY_INFORMATION", "", "Address"), titleName, dateRange);
System.Web.HttpContext.Current.Session.Add(SessionInfo.ReportFile, _rptdoc);
System.Web.HttpContext.Current.Session.Add(SessionInfo.ReportParam, hParameter);
return "";
}