2010-10-22 47 views
1

我已經使用數據表填充了一個列表框。如何從列表框中獲取數據表

在另一種方法中,我必須從列表框中檢索數據表。

Datatable dt = (DataTable)lstExample.DataSource; 

拋出一個錯誤,該Datatable dt is null

我對C#的工作ASP.Net

+2

是您嘗試檢索從列表框中同一頁面事件生命週期範圍內的數據源?如果這是從最初將數據表綁定到lstExample的單獨回發,那麼您將不再有權訪問數據表,因爲lstExample是從ViewState重新創建的。 – 2010-10-22 14:32:21

回答

2

如果你正在嘗試做這回發,然後DataTable將不再存在。如果您想在Postback上訪問它,或者只需再次點擊數據庫,則需要將其保存在ViewState或Session中。

例如:

protected override Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     DataTable tbl = GetData(); 
     lstData.DataSource = tbl; 
     lstData.DataBind(); 

     // store in viewstate 
     ViewState["data"] = tbl; 
    } 
} 

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    DataTable tbl = (DataTable)ViewState["data"]; 
} 
+0

我非常不喜歡保存到ViewState。如果將它保存到Session中,請確保檢查它不爲空,並根據需要重新加載並重新插入到數據存儲區的Session中。 – 2010-10-22 14:34:26

+0

謝謝..我在會話中存儲了數據表.. – 2010-10-22 14:38:18

+0

這實際上取決於您使用的數據量和會話狀態類型。對於少量的記錄存儲在視圖狀態不會那麼糟糕。如果您正在服務器場中運行並使用SQL會話狀態......則只需再次點擊數據庫就可以了。 – Dismissile 2010-10-22 14:45:25

0

刪除()lstExample.DataSource()