2014-10-16 51 views
1

我有一段代碼:ASP.NET控制分配給屬性空

protected void Page_Load(object sender, EventArgs e) 
    { 
     _SearchResult.GridViewChanged += _SearchResult_GridViewChanged; 
    } 

    public Control GvControls { get; set; } 

    protected void _SearchResult_GridViewChanged(object sender, Orders.GridViewChangedEventArgs e) 
    { 
     this.GvControls = e.GControl;    
    } 

    protected void export_ServerClick() 
    { 
     new ExportGridView(this.GvControls,"report"); 
    } 

一個控制生成與事件ARG一個事件並推動由arg的控制,那麼其他(本)控制做一些俯臥撐與此arg

當我試圖做推export_ServerClick()屬性GvControls等於空,但在之前不應爲空。爲什麼會發生。

ThankX

回答

1

所有變量(甚至控制)設置在頁面的生命週期結束。這就是爲什麼你必須重新創建所有動態創建的控件回發。出於同樣的原因,您必須重新初始化一個具有所需值的變量。

因此,我認爲GridViewChanged -event首先被觸發。然後用戶單擊另一個觸發export_ServerClick事件處理程序的按鈕。此時,字段GvControls已獲得其默認值,即null

您必須在某處保留此值,例如在Session中。

Nine Options for Managing Persistent User State in Your ASP.NET Application

但是,我認爲你不應該需要堅持的控逆變本身。也許這足以存儲控件的ID。也許是更好的導出它有兩個原因之前,將數據源再次裝入:

  1. 所示數據可能已經過時了,因爲其他用戶已經改變了它
  2. 你,你不需要擺弄在控制線,但你必須爲原始值
+0

但有可能'公共控制表 { 得到{(控制)會話[「GV」]; } set {Session [「gv」] = value; } }' – AleksP 2014-10-16 16:22:55

+0

是的,但是如果你真的想在會話中存儲數據,我更喜歡像DataTable那樣的真實數據源。 – 2014-10-16 16:35:24

+0

但我的gridview有一個特殊的格式 - 真的需要委託這種格式excel – AleksP 2014-10-16 17:02:45