我尝试将方法从一个webform调用到另一个webform,就像这样
report.aspx
public void BindReport(data crystalReport, DateTime fromdate, DateTime todate, string region)
{
T1 t = new T1();
List<griddataresult_Result> dsc = t.griddataresult(fromdate, todate,
region).ToList();
DataTable dt = new DataTable();
dt.Columns.Add("ID", typeof(int));
dt.Columns.Add("OwnerName", typeof(string));
dt.Columns.Add("RegNo", typeof(string));
foreach (var c in dsc)
{
dt.Rows.Add(c.ID, c.OwnerName, c.RegNo, c.total_voilatio);
}
crystalReport.DataDefinition.FormulaFields["region"].Text = "'" + region + "'";
crystalReport.DataDefinition.FormulaFields["fromdate"].Text = "'" + fromdate + "'";
crystalReport.DataDefinition.FormulaFields["todate"].Text = "'" + todate + "'";
crystalReport.SetDataSource(dt);
CrystalReportViewer1.ReportSource = crystalReport;
CrystalReportViewer1.DataBind();
}
和webform .aspx
protected void Report_Click(object sender, EventArgs e)
{
Reports b = new Reports();
data crystalReport = new data();
b.BindReport(crystalReport,Convert.ToDateTime(fromdate.Value),
Convert.ToDateTime(todate.Value), regiondrop.SelectedValue);
}
当我尝试这样的显示错误时:
System.NullReferenceException:未将对象引用设置为实例 一个对象。
在这一行
CrystalReportViewer1.ReportSource = crystalReport;
答案 0 :(得分:1)
你不应该闻起来像一个糟糕的设计。
页面在被请求时被实例化,并且通过手动实例化时不会发生的生命周期。
您有两种选择:将所需方法移动到外部类或创建包含相关方法的基类public class ReportPageBase:Page
{
protected void RenderReport(string param1, string param2)
{
//Your implementation
}
}
public class Report1 : ReportPageBase
{
protected void Button_Click(EventArgs args)
{
base.RenderReport("str1", "str2");
}
}
,并在需要时将其用作父类。
{{1}}