2011-11-04 49 views
0

我有一個Click事件填充DataTable和DataTable是我的GridView的源。堅持DataTable或GridView數據源

然後我有嘗試獲取GridView控件的DataSourceË另一個click事件轉換回一個DataTable像:

DataTable dt = (DataTable)GridView1.DataSource;

但數據源返回null。事件如果我把代碼和Page_Init事件等待合適的回發

,所以我想知道我能堅持在GridView的數據源,或數據表

編輯的要求:

這裏是整個代碼:

PS:在Page_Init是另一個嘗試獲取數據源

private DataTable _dataTable; 

    public DataTable dataTable 
    { 
     get { return _dataTable; } 
     set { _dataTable = value; } 
    } 

    protected void Page_Init(object sender, EventArgs e) 
    { 
     if(Page.IsPostBack) 
     { 
      string ctrlname = BLL.Common.GetPostBackControlId(this.Page); 

      if(ctrlname == "ButtonDownload") 
      { 
       DataTable dt = (DataTable)GridView1.DataSource; 
      } 
     } 
    } 


    protected void Filter_Click(object sender, EventArgs e) 
    { 
     string[] status = new string[2]; 
     status[0] = "Paga"; 
     status[1] = "Disponivél"; 

     dataTable = BLL.PagSeguro.GetTransactions(TextBoxInicio.Text, TextBoxFim.Text, status); 

     GridView1.DataSource = dataTable; 
     GridView1.DataBind(); 
    } 


    protected void GetDataSource(object sender, EventArgs e) 
    { 
     DataTable dt = (DataTable)GridView1.DataSource; 
    } 
+0

您可以顯示事件和您設置數據源的代碼嗎? –

+0

編輯帖子的代碼 – ShadowG

+0

我明白你在做什麼;您正試圖將數據保存在頁面生命週期之外;而我在下面提供的代碼將幫助您到達那裏,但需要重新加載數據。 –

回答

0

這可能會爲你工作。

public partial class Demo : System.Web.UI.Page 
{ 
    private DataTable _myData = null; 
    protected DataTable MyData 
    { 
     get 
     { 
      if (null == _myData) 
      { 
       // You would load your data here. 
       _myData = new DataTable(); 
      } 
      return _myData; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Lets say you set your data source here 
     myGrid.DataSource = this.MyData; 
    } 

    protected void Rendering(object sender, EventArgs e) 
    { 
     // This is some other event that also needs to get at the data. 
     DataTable mydata = this.MyData; 
    } 

    protected void Unload(object sender, EventArgs e) 
    { 
     if (null != _myData) 
     { 
      _myData.Dispose(); 
      _myData = null; 
     } 
    } 
0

我敢肯定,你只能通過DataBound事件或ItemDataBound事件訪問數據源的方式。您可能能夠訪問DataRowView的爲Items集合中的每個項目,但我不知道:

DataRow row = ((DataRowView)GridView1.Rows[0].DataItem).Row; 

至於持久化數據源,你需要考慮這是否是一個好主意。用於存儲數據源的選項爲SessionCache,但如果結果集相當小,則在需要數據源時進行另一次往返可能更有效。無論您決定做什麼,都不要將其存儲在ViewState中。