Dataview不包含其他事件中的记录。

时间:2011-11-11 11:22:07

标签: c# asp.net

我已在全球申报部分全球定义了数据视图。现在,我在一个方法中将另一个数据视图的值分配给该全局定义的数据视图。现在我将全局定义的Dataview用于另一种方法。但我没有得到第一种方法中定义的记录。我需要它。怎么做?

public partial class Properties : System.Web.UI.Page
{
    //Declaration of Dataview :
     DataView dtViewLink = new DataView();
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    // define in this method 
    protected void myMethod(object sender, EventArgs e)
    {
        dtViewLink = null;
        dtViewLink = dvEmployee;       //dvEmployee is other Dataview that has two records.
    }
    // i am using it here
   protected void ddlSortSortBy_SelectedIndexChanged(object sender, EventArgs e)
   {
       if (dtViewLink.Count > 0)
       {
                   dtViewLink.Sort = "" + strName + " Asc";

       }
   }
}

这个例子将清除我必须做的事情

3 个答案:

答案 0 :(得分:1)

假设您从不同页面或页面生命周期的不同阶段调用方法,数据视图的范围将丢失。您应该将此对象存储在缓存中,以便在单独的页面上使用。

答案 1 :(得分:1)

把这段代码:

dtViewLink = null;
dtViewLink = dvEmployee;
在PageLoad事件中

并调试上面显示的每个方法中发生的事情。

是具有任何记录的dvEmployee,或者在您输入方法ddlSortSortBy_SelectedIndexChanged之前在以下回发中为空?

人们问你是否处于同一页面生命周期而不是同一页面,这两个概念是不同的,因为网络表单是无状态的,如果你想在后面的帖子/生命周期中再次使用它,你应该保留你的数据和其他方法...

你可以创建你的loadData事件并一直从PageLoad中调用它,或者你在ViewState,Session或Cache中保留一些东西,这取决于这个相同的数据是否只能用于这个页面而且非常小(ViewState),到处都是对于当前用户会话(会话)或任何地方以及Web应用程序中的每个人(缓存)......

答案 2 :(得分:0)

use 

static DataView dtViewLink ; // globally