从一个web表单到另一个web表单的调用方法

本文关键字:表单 web 另一个 调用 方法 一个 | 更新日期: 2023-09-27 18:02:08

我尝试像这样从一个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);
        }

当我尝试这样显示错误时:

系统。NullReferenceException:对象引用没有设置为实例

在这一行

CrystalReportViewer1.ReportSource = crystalReport;

从一个web表单到另一个web表单的调用方法

你不应该这样做,它闻起来像一个糟糕的设计。页面在被请求时被实例化,并经过一个生命周期,而当您手动实例化它时则不会发生。您有两种选择:将所需的方法移动到外部类中,或者创建一个包含相关方法的基类PageBase : Page,并在需要时将其用作父类。

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");
        }
    }