private DataSet _Data;
protected DataSet Data
    {
        get
        {
            if (this._Data == null)
            {
                this._Data = new DataSet();
                this.Session.Add(SESSION_DATA_KEY, this._Data);
            }
            return this._Data;
        }
    }当第一次加载页面时取Data里数据,页面显示正常,Data里有数据.
然后点击分页时Data变成空的了,分页事件如下:
 protected void uwdSbyz_PageIndexChanged(object sender, Infragistics.WebUI.UltraWebGrid.PageEventArgs e)
    {
        this.uwdSbyz.DisplayLayout.Pager.CurrentPageIndex = e.NewPageIndex;
        uwdSbyz.DataSource = this.Data.Tables[tableName].DefaultView;
        uwdSbyz.DisplayLayout.LoadOnDemand = LoadOnDemand.Automatic;
        this.uwdSbyz.DataBind();
        pageChanged = true;
    }uwdSbyz.DataSource = this.Data.Tables[tableName].DefaultView;
这句里  Data是空的
请问有什么办法,让Data的数据一直存在(除非刻意去清空它)

解决方案 »

  1.   

    存到Session里了为什么不直接在Session里取呢?
      

  2.   

    怎么在Session里取?
    其实这些代码我原来是模仿别人的写的,自己也不大懂,原来测试可以通过
    后来修改了一个用户的取用方法,就出现了这种情况!
      

  3.   

    这和局部刷新没关系吧?我本来就是在AJAX里做的,本来就是局部刷新
      

  4.   

    能用ViewState来定义DateSet吗 ?
      

  5.   


    protected DataSet Data 
        { 
            get 
            { 
                if (this._Data == null) 
                { 
                    this._Data = new DataSet(); // 这句的问题
                    this.Session.Add(SESSION_DATA_KEY, this._Data); 
                } 
                return this._Data; 
            } 
        } 
      

  6.   

      读取
      if   (Session["ds"]==null)     //#####################保证过期后可以重新调用   
      {   
      sqlDataAdapter1.Fill   (dataSet11);   
      dg.DataSource=dataSet11.Tables[0];   
      dg.DataBind();   
      this.Session["ds"]=dataSet11;  }   
      在添加按钮中执行如下语句:   
      dataSet11=(DataSet1)(this.Session["ds"]);    
      DataRow   dr=dataSet11.Tables[0].NewRow();  dataSet11.Tables[0].Rows.Add   (dr);    
      dg.DataSource=dataSet11.Tables[0];   
      dg.DataBind();   
      

  7.   

    赋值代码我省略了,那个没问题啊
    首先是定义:private DataSet _Data;
              protected DataSet Data
        {
            get
            {
                if (this._Data == null)
                {
                    this._Data = new DataSet();
                    this.Session.Add(SESSION_DATA_KEY, this._Data);
                }
                return this._Data;
            }
        }然后写了个方法赋值
     protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                //绑定数据
                uwdSbyz.DisplayLayout.AllowUpdateDefault = Infragistics.WebUI.UltraWebGrid.AllowUpdate.Yes;
                this.InitialDataSet();
                uwdSbyz.DataSource = this.Data.Tables[tableName].DefaultView;
                uwdSbyz.DataBind();
                    
        } protected void InitialDataSet()
        {
          ........
        }
      

  8.   

    问题就出在这里,由于你是在!IsPostBack里面为_Data赋值的,当分页的时候,引发了页面回发,即PostBack,它就不会进入你绑定数据的代码,所以_Data是null,等到你要取Data属性的时候,就执行了以下代码:        get
            {
                if (this._Data == null)//回发之后this._Data就是null了
                {
                    this._Data = new DataSet();//重新初始化,但肯定是没有数据的
                    this.Session.Add(SESSION_DATA_KEY, this._Data);//再次将没有数据的DataSet放到Session
                }
                return this._Data;
            } 所以你分页之后能查出来数据才有鬼呢
      

  9.   

    我第一次加载时,给DataSet 赋值了啊,有什么办法让它在后面的调用里,也有值
      

  10.   

    1、把if(!IsPostBack)去掉就可以了,但我不推荐你这么做
    2、把字段_Data去掉,直接使用Session存储值:protected DataSet Data
        {
            get
            {
                return Session[SESSION_DATA_KEY] as DataSet;
            }
        } 
    protected void Page_Load(object sender, EventArgs e)//Page_Load不变
        {
            if (!this.IsPostBack)
            {
                //绑定数据
                uwdSbyz.DisplayLayout.AllowUpdateDefault = Infragistics.WebUI.UltraWebGrid.AllowUpdate.Yes;
                this.InitialDataSet();
                uwdSbyz.DataSource = this.Data.Tables[tableName].DefaultView;
                uwdSbyz.DataBind();
                   
        } 
    protected void InitialDataSet()//InitialDataset中把原来的_Data换成Session[SESSION_DATA_KEY] 
        {
          ........
        }
      

  11.   

    通过缓存cache保存就是,通过cache绑定
      

  12.   

    后面不行哦InitialDataset中把原来的_Data换成Session[SESSION_DATA_KEY]我的InitialDataset中是这样的: protected void InitialDataSet()
        {
          根据条件获得sql
          PublicDbWeb.PopulateDataSet(ref Session[SESSION_DATA_KEY], tableName, pkNum, pkColumns, geSql);
         }
    其中PublicDbWeb.PopulateDataSet是一个公共方法
    public static void PopulateDataSet(ref DataSet data,string tableName,int pkNum,string[] pkColumns,string setSql)
            {
                Database db = DatabaseFactory.CreateDatabase();
                DbConnection connection = db.CreateConnection();            DbDataAdapter adapter = db.GetDataAdapter();            adapter.SelectCommand = db.DbProviderFactory.CreateCommand();
                adapter.SelectCommand.Connection = connection;
                adapter.SelectCommand.CommandText = setSql;            adapter.Fill(data, tableName);
                if (pkNum > 0)
                {
                    DataColumn[] geColumns = new DataColumn[pkNum];
                    for (int i = 0; i < pkNum; i++)
                    {
                        geColumns[i] = data.Tables[tableName].Columns[pkColumns[i]];
                    }
                    data.Tables[tableName].PrimaryKey = geColumns;
                }
            }
      

  13.   


        protected void InitialDataSet()
        {
          DataSet ds = new DataSet();
          PublicDbWeb.PopulateDataSet(ref ds, tableName, pkNum, pkColumns, geSql);
          Session[SESSION_DATA_KEY] = ds;
        } 
      

  14.   


    我前头有这么一个自定义变量Session[SESSION_DATA_KEY]
    如下:
    DataSet _Data;
    const string SESSION_DATA_KEY = "SbyzDbUpdating_Dataset";
    protected DataSet Data
        {
            get
            {
                if (_Data == null)
                {
                    _Data = new DataSet();
                    this.Session.Add(SESSION_DATA_KEY, _Data);
                }
                return _Data;
            }
        }您有QQ么,我的3378582,我还有个问题要问,你看能不能远程在我机器上我给你演示下,你帮忙解决下.
      

  15.   


    我前头有这么一个自定义变量Session[SESSION_DATA_KEY]
    如下:
    DataSet _Data;
    const string SESSION_DATA_KEY = "SbyzDbUpdating_Dataset";
    protected DataSet Data
        {
            get
            {
                if (_Data == null)
                {
                    _Data = new DataSet();
                    this.Session.Add(SESSION_DATA_KEY, _Data);
                }
                return _Data;
            }
        }您有QQ么,我的3378582,我还有个问题要问,你看能不能远程在我机器上我给你演示下,你帮忙解决下.
      

  16.   


    我前头有这么一个自定义变量Session[SESSION_DATA_KEY]
    如下:
    DataSet _Data;
    const string SESSION_DATA_KEY = "SbyzDbUpdating_Dataset";
    protected DataSet Data
        {
            get
            {
                if (_Data == null)
                {
                    _Data = new DataSet();
                    this.Session.Add(SESSION_DATA_KEY, _Data);
                }
                return _Data;
            }
        }您有QQ么,我的3378582,我还有个问题要问,你看能不能远程在我机器上我给你演示下,你帮忙解决下.
      

  17.   


    这样改protected DataSet Data 
        { 
            get 
            { 
                if (this._Data == null) 
                { 
                    this._Data = Session[SESSION_DATA_KEY] as DataSet;                             
                } 
                return this._Data; 
            } 
        } 
    if (!this.IsPostBack) 
            { 
                //绑定数据 
                uwdSbyz.DisplayLayout.AllowUpdateDefault = Infragistics.WebUI.UltraWebGrid.AllowUpdate.Yes; 
                this.InitialDataSet(); 
                Session[SESSION_DATA_KEY]=Data ;
                uwdSbyz.DataSource = this.Data.Tables[tableName].DefaultView; 
                uwdSbyz.DataBind(); 
            }this.InitialDataSet(); 
    这个方法用你 原先的就行
      

  18.   

    我之前也用Session对象存储,但他们说Session很占内存,如果同时很多人的话,是用服务器内存,所以我后面用静态变量~!!
    private static DataSet _Data;
      

  19.   


    按照你的方法修改后,有个函数出错,如下 #region 重写OnInit脚本
        /// <summary>
        /// 重写OnInit脚本
        /// </summary>
        /// <param name="e"></param>
        protected override void OnInit(EventArgs e)
        {
            this.Data.Locale = new System.Globalization.CultureInfo("en-US");
            base.OnInit(e);
            this.uwdSbyz.InitializeLayout += new Infragistics.WebUI.UltraWebGrid.InitializeLayoutEventHandler(this.uwdSbyz_InitializeLayout);
            this.uwdSbyz.UpdateCellBatch += new Infragistics.WebUI.UltraWebGrid.UpdateCellBatchEventHandler(this.uwdSbyz_UpdateCell);
            this.uwdSbyz.DeleteRowBatch += new Infragistics.WebUI.UltraWebGrid.DeleteRowBatchEventHandler(this.uwdSbyz_DeleteRow);
            this.uwdSbyz.PageIndexChanged += new Infragistics.WebUI.UltraWebGrid.PageIndexChangedEventHandler(this.uwdSbyz_PageIndexChanged);
        }
        #endregion
      

  20.   

    建议把Session换成ViewState
    代码如下:
    protected DataSet Data 
        { 
            get 
            { 
                if (ViewState["DATA_KEY"]==null) 
                { 
                    return null;
                } 
                return ViewState["DATA_KEY"] as DataSet;
            } 
             set
             {
               ViewState["DATA_KEY"]=value; 
             }
        } 
    初始化的时候对Data赋值,用属性来访问Session或ViewState