2014-10-16 38 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