1

C#のクラスでグローバル変数を次のように宣言しました

 public partial class admin_AnalyseQuery : System.Web.UI.Page
{
    llvsMasterpage m;
    private const string ASCENDING = " ASC";
    private const string DESCENDING = " DESC";
    DataTable dt;

ここで、データテーブル dt をグローバル変数として作成しましたよね?

スクリーンショットのように、データテーブル dt がメソッドで満たされるようになりました

「BindDatagvAnalyse」 - データをグリッド ビューにバインドするメソッドです。

 private void BindDatagvAnalyse()
    {
        Guid SchoolID = Guid.Parse(School.SelectedValue);
        Guid YearID = Guid.Parse(Years.SelectedValue);
        Guid VersionID = Guid.Parse(Versions.SelectedValue);
        Guid LessonID = Guid.Parse(Lessons.SelectedValue);
        Guid TeacherID = Guid.Parse(Teachers.SelectedValue);
        Guid LearningunitID = Guid.Parse(Learningunits.SelectedValue);
        Guid DomainID = Guid.Parse(Domain.SelectedValue);
        pnllbl.Visible = true;
        string Schoolname = School.SelectedItem.Text;
        string Yearname = Years.SelectedItem.Text;
        string Versionname = Versions.SelectedItem.Text;
        string Lessonnmae = Lessons.SelectedItem.Text;
        string Teachername = Teachers.SelectedItem.Text;
        string Learningunitname = Learningunits.SelectedItem.Text;
        string Domainname = Domain.SelectedItem.Text;
        lblinfo.Text = Schoolname + "/" + Yearname + "/" + Lessonnmae + "/" + Versionname + "/" + Teachername + "/" + Domainname + "/" + Learningunitname;
        //  Guid PeriodID = Guid.Parse(Periods.SelectedValue);
        dt = m.bussinesCollection.BussinesDomain.GetAllDetailsForgvanalyse(SchoolID, YearID, LessonID, VersionID, TeacherID, LearningunitID, DomainID);
        int count = dt.Rows.Count;
        lblcount.Text = count.ToString();
        int c = m.bussinesCollection.BussinesDomain.GetAllDetailsForgvanalyseCount(SchoolID, YearID, LessonID, VersionID, TeacherID, LearningunitID, DomainID);
        lblstd.Text = c.ToString();
        gvAnalyse.DataSource = dt;
        gvAnalyse.DataBind();
    }

ドロップダウンの選択に従ってテーブルを作成し、それに応じてメソッドを呼び出し、それに応じて画面に表示される gvanalyse を埋めるこのタイプの 6 つのメソッドを作成しました。

これで、テーブルから Excel シートを作成するボタンを配置しました。

[Excel のエクスポート] ボタンのクリック イベントで、現在画面に表示されているテーブルを含む Excel シートを作成する必要があります。

そのために、ボタンクリックイベントでこれを行いました

protected void btnexel_Click(object sender, EventArgs e)
    {
        byte[] Result;
        using (MemoryStream ms = new MemoryStream())
        {
            string school = School.SelectedItem.Text;
            string year = Years.SelectedItem.Text;
            DataTable final = dt;
            // DataTable dt = m.bussinesCollection.BussinesDomain.GetAllDetailsForgvanalyse(SchoolID, YearID, LessonID, VersionID, TeacherID, LearningunitID, DomainID);
            string style = @"<style> .textmode { mso-number-format:\@; } </style>";
            Response.Write(style);
            Result = ms.GetBuffer();
            Session["Excel"] = Result;
            Session["dt"] = final;
            Session["school"] = school;
            Session["year"] = year;
            Session["pdf/excel"] = "excel/loondiest/analyse";
            Response.Redirect("~/admin/DownloadPdf.aspx");
        }
}

しかし、デバッグすると、テーブルの最終と dt の両方が null であることが常に示されます。

私は何をすべきか?

4

1 に答える 1

0

データを投稿するとデータが失われるため、を保持DataTableする必要があります。persistance structure

永続性の構造

ViewState : on page with post

Session

Cache

Application

サンプル

public DataTable Table
{
  get
  {   
      if(ViewState["KeyTable"] != null)
      {
         return ViewState["KeyTable"] as DataTable;
      }
  }
  set
  {
     ViewState["KeyTable"] = value;
  }
} 

使用事例 :

Table = your value;

.....

テーブル=

于 2012-09-13T10:02:13.240 に答える