頁面無限跳轉間如何保存頁面狀態(2)
2024-07-21 02:16:25
供稿:網友
 
解決方法的實現
 以上分析過了之后,我們來看如何實現他:
 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;
 }
 }
 
(未完待續)