2013-09-23 26 views
4

button_click事件被觸發時。我從方法中獲得DataTable,並將其分配給在類中定義的DataTable,但是這個設置爲DataTable。如果我綁定DataTableGridView它顯示數據。DataTable未分配

public partial class Default : System.Web.UI.Page 
{ 
    TestClass test = new TestClass(); 
    DataTable _table = new DataTable(); 

    protected void Button1_Click(object sender, EventArgs e) 
    { 

     _table = test.getTable(); 
    //displaying table 
     GridView1.DataSource= _table; 
     GridView1.DataBind(); 
    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 
     //does not displaying table 
     GridView2.DataSource= _table; 
     GridView2.DataBind(); 
    } 
} 

當我想從_table得到一些數據時,它什麼也沒有。怎麼了?

更新: 感謝所有,特別是Darren Davies,問題在回發。當Button2_Click事件發生時_table分配_table = new DataTable(),因此_table不再引用由方法getTable()返回的表。

+0

確定getTable()返回數據? –

+0

我調試它和_table哈哈ve行[count = 54],但然後我單擊button2行有count = 0. –

+0

@AlbertGore - 最有可能發生回發。你需要再次調用'getTable' –

回答

4

如果在Button2之前單擊Button1,它將只能正確綁定。否則_table將不會被填充。

你應該檢查_table有數據或致電Button2_Click事件處理程序內的getTable方法:

protected void Button2_Click(object sender, EventArgs e) 
    { 
     _table = test.getTable(); 
     GridView2.DataSource= _table; 
     GridView2.DataBind(); 
    } 
0

什麼你可以嘗試是這樣的:

protected void Button1_Click(object sender, EventArgs e) 
     { 

      _table = test.getTable(); 
     //displaying table 
     GridVieuw1.Datasource = null; 
     GridView1.DataSource= _table; 
     GridView1.DataBind(); 

     } 

你也必須在buuton做到這一點2

protected void Button2_Click(object sender, EventArgs e) 
      { 

       _table = test.getTable(); 
      //displaying table 
      GridVieuw2.Datasource = null; 
      GridView2.DataSource= _table; 
      GridView2.DataBind(); 

      } 

Otheriwse the t能夠在按鈕2空的,所以你必須按下按鈕1來填補它

也許可以做的伎倆

0

要初始化您DataTable

DataTable _table = new DataTable(); 

然後,當你點擊你的按鈕1:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    _table = test.getTable(); // <- here 
//displaying table 
    GridView1.DataSource= _table; 
    GridView1.DataBind(); 
} 

你分配你的DataTable不同實例。 你必須調試和檢查你的方法getTable返回一個有效DataTable(如果你想看到你的數據,請確保它包含的數據。當你不扣2之前按下按鈕1

0

您的問題出現你應該廣義你的數據像這樣綁定:

public partial class Default : System.Web.UI.Page 
{ 
    TestClass test = new TestClass(); 
    DataTable _table = new DataTable(); 

    protected void Button1_Click(object sender, EventArgs e) 
    { 

     FillDataTable(); // <----------- See this function call 

    //displaying table 
     GridView1.DataSource= _table; 
     GridView1.DataBind(); 
    } 
    protected void Button2_Click(object sender, EventArgs e) 
    { 

     FillDataTable(); // <----------- See this function call 

     //does not displaying table 
     GridView2.DataSource= _table; 
     GridView2.DataBind(); 
    } 

    private void FillDataTable() 
    { 
     if(_table.Rows.Count == 0) 
      _table = test.getTable(); 
    } 
} 

這將是明智的方式來填補表一次,而不是填充每按一下按鈕,它在每一個按鈕單擊事件寫下