页面无限跳转间如何保存页面状态(2)

来源:互联网 发布:sqlserver 按月分组 编辑:程序博客网 时间:2024/06/07 02:24
解决方法的实现
       以上分析过了之后,我们来看如何实现他:
       class DataInfo:这个类用于保存数据状态,一般而言,也就是每个DataGrid对应一个:
[Serializable()]
     public class DataInfo
     {
         private string dataName;
         private Hashtable searchParams;
         private Hashtable otherParams;
         private int currentPage;
         private string sortExpression;
         private string itemID;
 
         public DataInfo(string dataName)
         {
              this.dataName = dataName;
         }
 
         /// <summary>
         /// 数据名
         /// </summary>
         public string DataName
         {
              get { return dataName; }
         }
         /// <summary>
         /// 查询参数
         /// </summary>
         public Hashtable SearchParams
         {
              get { return searchParams; }
              set { searchParams = value; }
         }
 
         /// <summary>
         /// 获取其他参数
         /// </summary>
         public Hashtable OtherParams
         {
              get { return otherParams; }
              set { otherParams = value; }
         }
 
         /// <summary>
         /// 获取当前页
         /// </summary>
         public int CurrentPage
         {
              get { return currentPage; }
              set { currentPage = value; }
         }
 
         /// <summary>
         ///获取排序方式
         /// </summary>
         public string SortExpression
         {
              get { return sortExpression ;}
              set { sortExpression = value; }
         }
 
         /// <summary>
         /// 获取要显示在当前页的项的ID
         /// </summary>
         public string ItemID
         {
              get { return itemID; }
              set { itemID = value; }
         }
     }
 
class DataInfoList:这个类包装承载DataInfo的动态数组,限定数组输入输出的数据类型
[Serializable()]
     public class DataInfoList
     {
         private ArrayList dataInfoList = new ArrayList();
 
         public DataInfo this[int index]
         {
              get
              {
                   return (DataInfo)dataInfoList[index];
              }
              set
              {
                   if (((DataInfo)dataInfoList[index]).DataName == value.DataName || this[value.DataName] == null)
                   {
                       dataInfoList[index] = value;
                   }
                   else
                   {
                       throw new Exception("There have a DataInfo used this Name yet!");
                   }
              }
         }
 
         public DataInfo this[string dataName]
         {
              get
              {
                   for (int i = 0; i < dataInfoList.Count; i++)
                   {
                       if (this[i].DataName == dataName)
                       {
                            return this[i];
                       }
                   }
                   return null;
              }
              set
              {
                   for (int i = 0; i < dataInfoList.Count; i++)
                   {
                       if (this[i].DataName == dataName)
                       {
                            this[i] = value;
                            return;
                       }
                   }
                   this.Add(value);
              }
         }
 
         public void Remove(DataInfo value)
         {
              dataInfoList.Remove(value);
         }
 
         public void Remove(string dataName)
         {
              DataInfo dataInfo = this[dataName];
              if (dataInfo != null)
              {
                   dataInfoList.Remove(dataInfo);
              }
         }
 
         public bool Contains(DataInfo value)
         {
              return dataInfoList.Contains(value);
         }
 
         public bool Contains(string dataName)
         {
              DataInfo datainfo = this[dataName];
              if (datainfo != null)
              {
                   return true;
              }
              return false;
         }
 
         public void Clear()
         {
              dataInfoList.Clear();
         }
 
         public int Add(DataInfo value)
         {
              if (this[value.DataName] == null)
              {
                   return dataInfoList.Add(value);
              }
              else
              {
                   throw new Exception("There have a DataInfo used this Name yet!");
              }
         }
 
         public int Count
         {
              get
              {
                   return dataInfoList.Count;
              }
         }
     }
 
interface IPageInfo:这个接口用在页面中,以实现页面间的数据通信。
public interface IPageInfo
     {
         /// <summary>
         /// 页面名
         /// </summary>
         string PageName
         {
              get;
         }
         /// <summary>
         /// 获取数据信息
         /// </summary>
         DataInfoList DataInfos
         {
              get;
         }
        
         /// <summary>
         /// 获取其他参数
         /// </summary>
         Hashtable OtherParams
         {
              get;
         }
     }

 

(未完待续)