2016-07-28 4 views
1

Мне нужно использовать глобальную dataTable в моем проекте .net. Тем не менее, я не могу справиться с этим между двумя методами.Как создать глобальную dataTable в C#?

В моем примере dt1 является глобальной dataTable и dt2 является локальным, что dt2 является прямым использованием для вызова другого метода.

результат: dt1: я не знаю, как его описать, ему нравится вся html-страница в excel.

dt2: очень хорошо!

Можете ли вы сказать мне, почему dt1 является неправильным? Он должен быть идеальным .. мой код:

private DataTable dt1;// same result as public DataTable dt1{ get; private set; }"" 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
     DataTable dt = new DataTable(); 
       dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)), 
          new DataColumn("LongURL", typeof(string)), 
          new DataColumn("CreatingDate",typeof(string)) }); 
       dt.Rows.Add(1, "John Hammond", "United States"); 
       dt.Rows.Add(2, "Mudassar Khan", "India"); 
       dt.Rows.Add(3, "Suzanne Mathews", "France"); 
       dt.Rows.Add(4, "Robert Schidner", "Russia"); 
      dt1 = dt; 
     } 
    } 


    protected void Btn_Click(object sender, EventArgs e) 
    { 
      DataTable dt2 = new DataTable(); 
      dt2.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)), 
          new DataColumn("LongURL", typeof(string)), 
          new DataColumn("CreatingDate",typeof(string)) }); 
      dt2.Rows.Add(1, "John Hammond", "United States"); 
      dt2.Rows.Add(2, "Mudassar Khan", "India"); 
      dt2.Rows.Add(3, "Suzanne Mathews", "France"); 
      dt2.Rows.Add(4, "Robert Schidner", "Russia"); 

     exportToExcel(dt1);// fail :(
     exportToExcel(dt2);// success! 

    } 
+0

Вы проверили, содержит ли данные dt1 данные или нет? –

+0

Думаю, вам нужно установить dt1 = new DataTable(); то dt1 = dt; Попробуй это. –

+0

@sowjanyaattaluri Я не знаю, как его описать .. Он содержит некоторые данные, но не данные, которые я ему даю. –

ответ

1

Это причина состояния if (!Page.IsPostBack) и из-за которой в случае нажатия кнопки при постбэк происходит вы повторно не загрузку или заполнение dt1 и так как это новый запрос страницы с новым экземпляром страницы dt1 больше нет. Удалить это состояние в целом и тест

private DataTable dt1; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    dt1 = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)), 
         new DataColumn("LongURL", typeof(string)), 
         new DataColumn("CreatingDate",typeof(string)) }); 
      dt.Rows.Add(1, "John Hammond", "United States"); 
      dt.Rows.Add(2, "Mudassar Khan", "India"); 
      dt.Rows.Add(3, "Suzanne Mathews", "France"); 
      dt.Rows.Add(4, "Robert Schidner", "Russia"); 
} 

(ИЛИ) хранить DataTable к session и повторно использовать его как

session["dt"] = dt1; 

if(session["dt"] != null) 
     exportToExcel((DataTable)session["dt"]); 
+0

Я уже пробовал это, но моя функция щелчка изменит его значение. Поэтому я помещаю его в блок if (! Page.IsPostBack). –

+0

Не знаете, что вы говорите? Более того, если оба типа данных содержат точные данные, то у вас есть две копии? – Rahul

+0

Данные моей базы данных поступают из базы данных. Поэтому может возникнуть ошибка, если я попытаюсь запросить базу данных дважды. –

0

Это не ясно, что ваше определение глобального является (страница, содержащая пример или весь проект, о котором вы говорите), поэтому я использовал 3 разных способа сохранить контент в этом примере. Ваш экспорт не работает, потому что содержимое dt1 теряется в PostBack.

 if (!Page.IsPostBack) 
     { 
      DataTable dt = new DataTable(); 
      dt.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)), 
         new DataColumn("LongURL", typeof(string)), 
         new DataColumn("CreatingDate",typeof(string)) }); 
      dt.Rows.Add(1, "John Hammond", "United States"); 
      dt.Rows.Add(2, "Mudassar Khan", "India"); 
      dt.Rows.Add(3, "Suzanne Mathews", "France"); 
      dt.Rows.Add(4, "Robert Schidner", "Russia"); 

      ViewState["yourTable"] = dt; 
      // or 
      Session["yourTable"] = dt; 
      // or 
      Application["yourTable"] = dt; 
     } 


    protected void Btn_Click(object sender, EventArgs e) 
    { 
     DataTable dt2 = new DataTable(); 
     dt2.Columns.AddRange(new DataColumn[3] { new DataColumn("ShortURL", typeof(int)), 
         new DataColumn("LongURL", typeof(string)), 
         new DataColumn("CreatingDate",typeof(string)) }); 
     dt2.Rows.Add(1, "John Hammond", "United States"); 
     dt2.Rows.Add(2, "Mudassar Khan", "India"); 
     dt2.Rows.Add(3, "Suzanne Mathews", "France"); 
     dt2.Rows.Add(4, "Robert Schidner", "Russia"); 

     if (ViewState["yourTable"] != null) 
     { 
      exportToExcel(ViewState["yourTable"] as DataTable); 
     } 
     // or 
     if (Session["yourTable"] != null) 
     { 
      exportToExcel(Session["yourTable"] as DataTable); 
     } 
     // or 
     if (Application["yourTable"] != null) 
     { 
      exportToExcel(Application["yourTable"] as DataTable); 
     } 

     exportToExcel(dt2); 
    } 
Смежные вопросы