对象引用未设置为 ReportViewer 中的对象实例
Object reference not set to an instance of an object in ReportViewer
我在页面上报告说,如果我离开 20 分钟,我会收到错误消息对象引用未设置为对象的实例
AMFM.ReportViewer.GenerateReport(DataTable dt) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:76
AMFM.ReportViewer.Page_Init(Object sender, EventArgs e) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:65
第一个问题:上面的路径甚至不是我运行宁这个运行的用户配置文件或路径。
第二个问题是当用户试图刷新页面时如何消除这个错误。
此代码是从 TFS 复制的。这是第 65 和 76 行的代码
private void Page_Init(object sender, EventArgs e) {
DataTable dt = (DataTable)Session["dataset"];
String query = (String)Session["query"];
//System.Diagnostics.Debug.WriteLine("********************" + query);
//System.Diagnostics.Debug.WriteLine("########################" + dt.Rows.Count.ToString());
if (dt == null) {
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
GenerateReport(dt);
}
protected void GenerateReport(DataTable dt) {
// Get the dataset from the session state. Passed in from Reports.aspx.
// This way the dataset is only generated once.
//Report treport = new Report();
// Get the report node from the session state. Passed in from Reports.aspx
ReportTreeNode rn = (ReportTreeNode)Session["report"];
System.Diagnostics.Debug.WriteLine(String.Format("### {0}", rn.Text));
//Report r = new Report();
System.Diagnostics.Debug.WriteLine(String.Format(" {0}",
rn.treport.ToString())
);
rn.treport.ReportParameters["title"].Value = rn.Text + " Report";
rn.treport.ReportParameters["title2"].Value = rn.title2;
rn.treport.DataSource = dt;
TReportViewer1.ReportSource = rn.treport;
//TReportViewer1.Report = rn.treport;
// do a refresh if needed.
//TReportViewer1.RefreshReport();
}
需要帮助进行故障排除。我至少也想在出现此异常时重定向到主页
我对此并不完全确定,但这是我唯一能想到的与您离开页面的时间量有关的事情,会话 可能 即将到期在服务器上。
你有 Page_Init
的地方你需要修改它以便检查该查询是否为空
private void Page_Init(object sender, EventArgs e)
{
DataTable dt = (DataTable)Session["dataset"];
String query = ""
if(Session["query"]!= null){
query = (String)Session["query"];
}
if (dt == null)
{
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
GenerateReport(dt);
}
然后您需要在下次使用查询时检查查询以确保它不是空字符串。
如果做不到这一点,请将 visual studios 调试器附加到它并让它显示空引用的来源。
我不建议将错误重定向到非信息性主页,虽然这可能 看起来 更像样,但它实际上只是对需要解决的问题的一种肮脏的解决方法,并且可能使以后的问题更难解决,从而产生滚雪球效应。
错误可能是由于会话超时(默认为 20 分钟)和您的会话变量丢失数据所致。
private void Page_Init(object sender, EventArgs e) {
DataTable dt;
String query = "";
if (Session["query"] != null) {
query = (String)Session["query"];
}
if (Session["dataset"] != null) {
dt = (DataTable)Session["dataset"];
GenerateReport(dt);
}
else {
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
}
还在 GenerateReport 方法中检查任何其他会话变量,如 ReportTreeNode 等。
protected void GenerateReport(DataTable dt) {
ReportTreeNode rn;
if (Session["report"] != null) {
rn = (ReportTreeNode)Session["report"];
rn.treport.ReportParameters["title"].Value = rn.Text + " Report";
rn.treport.ReportParameters["title2"].Value = rn.title2;
rn.treport.DataSource = dt;
TReportViewer1.ReportSource = rn.treport;
}
}
我在页面上报告说,如果我离开 20 分钟,我会收到错误消息对象引用未设置为对象的实例
AMFM.ReportViewer.GenerateReport(DataTable dt) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:76
AMFM.ReportViewer.Page_Init(Object sender, EventArgs e) in c:\Users\gorella\Documents\Visual Studio 2013\Projects\Web_Applications\AMFM\AMFM\ReportViewer.aspx.cs:65
第一个问题:上面的路径甚至不是我运行宁这个运行的用户配置文件或路径。
第二个问题是当用户试图刷新页面时如何消除这个错误。
此代码是从 TFS 复制的。这是第 65 和 76 行的代码
private void Page_Init(object sender, EventArgs e) {
DataTable dt = (DataTable)Session["dataset"];
String query = (String)Session["query"];
//System.Diagnostics.Debug.WriteLine("********************" + query);
//System.Diagnostics.Debug.WriteLine("########################" + dt.Rows.Count.ToString());
if (dt == null) {
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
GenerateReport(dt);
}
protected void GenerateReport(DataTable dt) {
// Get the dataset from the session state. Passed in from Reports.aspx.
// This way the dataset is only generated once.
//Report treport = new Report();
// Get the report node from the session state. Passed in from Reports.aspx
ReportTreeNode rn = (ReportTreeNode)Session["report"];
System.Diagnostics.Debug.WriteLine(String.Format("### {0}", rn.Text));
//Report r = new Report();
System.Diagnostics.Debug.WriteLine(String.Format(" {0}",
rn.treport.ToString())
);
rn.treport.ReportParameters["title"].Value = rn.Text + " Report";
rn.treport.ReportParameters["title2"].Value = rn.title2;
rn.treport.DataSource = dt;
TReportViewer1.ReportSource = rn.treport;
//TReportViewer1.Report = rn.treport;
// do a refresh if needed.
//TReportViewer1.RefreshReport();
}
需要帮助进行故障排除。我至少也想在出现此异常时重定向到主页
我对此并不完全确定,但这是我唯一能想到的与您离开页面的时间量有关的事情,会话 可能 即将到期在服务器上。
你有 Page_Init
的地方你需要修改它以便检查该查询是否为空
private void Page_Init(object sender, EventArgs e)
{
DataTable dt = (DataTable)Session["dataset"];
String query = ""
if(Session["query"]!= null){
query = (String)Session["query"];
}
if (dt == null)
{
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
GenerateReport(dt);
}
然后您需要在下次使用查询时检查查询以确保它不是空字符串。
如果做不到这一点,请将 visual studios 调试器附加到它并让它显示空引用的来源。
我不建议将错误重定向到非信息性主页,虽然这可能 看起来 更像样,但它实际上只是对需要解决的问题的一种肮脏的解决方法,并且可能使以后的问题更难解决,从而产生滚雪球效应。
错误可能是由于会话超时(默认为 20 分钟)和您的会话变量丢失数据所致。
private void Page_Init(object sender, EventArgs e) {
DataTable dt;
String query = "";
if (Session["query"] != null) {
query = (String)Session["query"];
}
if (Session["dataset"] != null) {
dt = (DataTable)Session["dataset"];
GenerateReport(dt);
}
else {
System.Diagnostics.Debug.WriteLine("THIS IS A TEST EVENT MESSAGE Response Header----------- THIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT MESSAGETHIS IS A TEST EVENT"); ;
}
}
还在 GenerateReport 方法中检查任何其他会话变量,如 ReportTreeNode 等。
protected void GenerateReport(DataTable dt) {
ReportTreeNode rn;
if (Session["report"] != null) {
rn = (ReportTreeNode)Session["report"];
rn.treport.ReportParameters["title"].Value = rn.Text + " Report";
rn.treport.ReportParameters["title2"].Value = rn.title2;
rn.treport.DataSource = dt;
TReportViewer1.ReportSource = rn.treport;
}
}