網域查詢: www.
返回首頁

自定義的數據集合對象的自定義排序和顯示

時間:2010-02-13 00:35來源: 作者: 點擊:
部分代碼: 數據實體對象: using System; using VUser.ECommerce.DataProxy; namespace VUser.ECommerce.Core { [Serializable] public class BaseObject : IComparable { #region 域成員 private int m_ID; private string m_Title; private stri
  

部分代碼:
數據實體對象:
using System;
using VUser.ECommerce.DataProxy;

namespace VUser.ECommerce.Core
{

 [Serializable]
 public class BaseObject :  IComparable
 {
  
  #region 域成員
    
  private int m_ID;
  private string m_Title;
  private string m_Remark;
  private IDataProxy m_DataProxy;
  private bool m_IsModify = false;
  private bool m_IsDirty = false;
  private string m_SortFieldName;


  #endregion

  #region 屬性
  public virtual int ID
  {
   set
   {
    m_ID = value;
   }
   get
   {
    return m_ID;
   }
  }
  /// <summary>
  /// 名稱
  /// </summary>
  public virtual string Title
  {
   set
   {
    m_Title = value;
   }
   get
   {
    return m_Title;
   }
  }
  /// <summary>
  /// 注釋
  /// </summary>
  public string Remark
  {
   set
   {
    m_Remark = value;
   }
   get
   {
    return m_Remark;
   }
  }
  public virtual string SortFieldName
  {
   get
   {
    if(m_SortFieldName == null)
    {
     m_SortFieldName = "ID";
    }
    return m_SortFieldName;
   }
   set
   {
    m_SortFieldName = value;
   }
  }
  

  /// <summary>
  /// 數據庫代理對象(對數據庫的操作)
  /// </summary>
  public virtual IDataProxy DataProxy
  {
   get
   {
    return this.m_DataProxy;
   }
   set
   {
    this.m_DataProxy = value;
   }
  }
  public bool IsModify
  {
   get
   {
    return this.m_IsModify;
   }
   set
   {
    this.m_IsModify = value;
   }
  }
  public bool IsDirty
  {
   get
   {
    return this.m_IsDirty;
   }
   set
   {
    this.m_IsDirty = value;
   }
  }
  #endregion

  #region 構造器

  /// <summary>
  /// 構造器
  /// </summary>
  public BaseObject()
  {
   //
   // TODO: 在此處添加構造函數邏輯
   //
  }
  /// <summary>
  /// 帶數據代理對象的構造器
  /// </summary>
  /// <param name="objDataProxy"></param>
  public BaseObject(IDataProxy objDataProxy)
  {
   this.DataProxy = objDataProxy;
  }

  #endregion


  #region 私有方法
  #endregion

  #region 公共方法

  public static BaseObject New()
  {
   return new BaseObject();
  }
  /// <summary>
  /// 從數據庫中裝載數據
  /// </summary>
  /// <returns>對象的一個新實例</returns>
  public BaseObject Load(int id)
  {
   return DataProxy.GetItemByID(id);
   
  }
  public virtual void Update()
  {
   if (this.IsModify)
   {
    DataProxy.Update(this);
   }
  }
  public virtual void Delete(int id)
  {
   DataProxy.DeleteByID(id);
  }
  
  #endregion

  #region IComparable 成員

  public virtual int CompareTo(object obj)
  {
   if (SortFieldName.ToUpper().Equals("ID"))
   {
    return ID.CompareTo(((BaseObject)obj).ID);
   }
   if(SortFieldName.ToUpper().Equals("TITLE"))
   {
    if (Title == null)
    {
     return -1;
    }
    return this.Title.CompareTo(((BaseObject)obj).Title);
   }
   return 0;
  }

  #endregion

  #region 重載方法
  /// <summary>
  /// 比較兩個對象是否相等
  /// </summary>
  /// <param name="obj"></param>
  /// <returns></returns>
  public override bool Equals(object obj)
  {
   if (obj == null || GetType() != obj.GetType())
   {
    return false;
   }
   return ID.Equals(((BaseObject)obj).ID);
  }
  public override int GetHashCode()
  {
   return ID.GetHashCode ();
  }


  #endregion

  #region 操作符重栽

  public static bool operator ==(BaseObject x, BaseObject y)
  {
   return x.ID == y.ID;
  }
  public static bool operator !=(BaseObject x, BaseObject y)
  {
   return !(x == y);
   
  }
  #endregion
  public override string ToString()
  {
   return this.Title;
  }


 }
}
數據實體對象News

using System;
using System.Data;
using VUser.ECommerce.DataProxy;

namespace VUser.ECommerce.Core
{
 /// <summary>
 /// News 的摘要說明。
 /// </summary>
 public class News : BaseObject
 {
  private DateTime m_AddTime = DateTime.Now;
  private int m_ClassID;
  private string m_ClassName;
  private NewClass m_NewClassObj;
  private bool m_IsPublish;
  public DateTime AddTime
  {
   get
   {
    return m_AddTime;
   }
   set
   {
    m_AddTime = value;
   }
  }
  public int ClassID
  {
   get
   {
    return m_ClassID;
   }
   set
   {
    
//    if (!new NewsCollection().IsExist(value))
//    {
//     throw new Exception("the ClassID isn't exist");
//    }
    m_ClassID = value;
   }
  }
  public string ClassName
  {
   get
   {
    return this.m_ClassName;
   }
   set
   {
    this.m_ClassName = value;
   }
  }
  public NewClass  NewClassObj
  {
   get
   {
    if(m_NewClassObj == null)
    {
     if(this.m_ClassID != 0)
     {
      m_NewClassObj = (NewClass)(new NewClass().Load(ClassID));
     }
    }
    return m_NewClassObj;
   }
  }
  public bool IsPublish
  {
   get
   {
    return m_IsPublish;
   }
   set
   {
    m_IsPublish = value;
   }
  }
  public News()
  {
   //
   // TODO: 在此處添加構造函數邏輯
   //
  }
  
  public override int CompareTo(object obj)
  {
   if (this.SortFieldName.ToUpper().Equals("AddTime"))
   {
    return AddTime.CompareTo(((News)obj).AddTime);
   }
   if (this.SortFieldName.ToUpper().Equals("ClassID"))
   {
    return ClassID.CompareTo(((News)obj).ClassID);
   }
   if (this.SortFieldName.ToUpper().Equals("ClassName"))
   {
    return ClassName.CompareTo(((News)obj).ClassName);
   }
   if (this.SortFieldName.ToUpper().Equals("IsPublish"))
   {
    return IsPublish.CompareTo(((News)obj).IsPublish);
   }
   return base.CompareTo (obj);
  }
  
  
 }
}


數據集合對象
using System;
using System.Collections;
using System.Data;
using VUser.ECommerce.DataProxy;

namespace VUser.ECommerce.Core
{
 [Serializable]
 public class BaseCollection : IEnumerator,ICollection
 {

  #region 域

  #region 數據同步標識位

  /// <summary>
  /// Items(內存)數據是否更改過,還沒有提交到數據庫
  /// </summary>
  private bool m_IsModify = false;
  /// <summary>
  ///  是否數據庫中的數據已經更改,Items(內存)數據已經〞髒〞了
  /// </summary>
  private bool m_IsDirty = false;

  #endregion

  /// <summary>
  /// 瀏覽數據的游標指針
  /// </summary>
  private int m_Index = -1;
  /// <summary>
  /// 操作數據庫的代理對象
  /// </summary>
  private IDataProxy m_DataProxy;
  /// <summary>
  /// 存儲數據對象
  /// </summary>
  private ArrayList m_Items;

  #endregion

  #region 屬性
  /// <summary>
  /// set sort fields name
  /// </summary>
  public string SetSortFieldName
  {
   set
   {
    for(int i = 0 ;i< Items.Count;i++)
    {
     ((BaseObject)Items[i]).SortFieldName = value;
    }
   }
  }
  /// <summary>
  /// Items(內存)數據是否更改過,還沒有提交到數據庫
  /// </summary>
  public bool IsModify
  {
   get
   {
    return m_IsModify;
   }
   set
   {
    m_IsModify = value;
   }
  }
  /// <summary>
  /// 是否數據庫中的數據已經更改,Items(內存)數據已經〞髒〞了
  /// </summary>
  public bool IsDirty
  {
   set
   {
    m_IsDirty = value;
   }
   get
   {
    return m_IsDirty;
   }
  }
  /// <summary>
  /// 記錄的集合
  /// </summary>
  public ArrayList Items
  {
   get
   {
    if(this.m_Items == null)
    {
     m_Items = new ArrayList();
    }
    return this.m_Items;
   }
  }
  /// <summary>
  /// 集合對象中的記錄數量
  /// </summary>
  public int Count
  {
   get
   {
    return Items.Count;
   }
  }
  /// <summary>
  /// 操作數據庫的代理對象
  /// </summary>
  public virtual IDataProxy DataProxy
  {
   get
   {
    return m_DataProxy;
   }
   set
   {
    m_DataProxy = value;
   }
  }
  /// <summary>
  /// 索引器
  /// </summary>
  public BaseObject this[int index]
  {
   get
   {
    if (Items != null)
    {
     if ((index >=0) || ( index < this.Items.Count))
      return (BaseObject)Items[index];
     else
      return null;
    }
    else
    {
     return null;
    }
   }
   set
   {
    if (this.Items != null)
    {
     if ((index >=0) || ( index < this.Items.Count))
      this.Items[index] = value;
    }
   }
  }
  #endregion

  #region 構造器

  public BaseCollection()
  {
  }
  private BaseCollection(ArrayList items)
  {
   m_Items = items;
  }

  #endregion

  #region 利用數據庫代理對象(DataProxy)的操作

  #region 從數據庫中裝載數據

  public virtual BaseCollection Load()
  {
   return DataProxy.Load();
  }

  #endregion

  public void DeleteByID(int id)
  {
   DataProxy.DeleteByID(id);
  }

  public virtual int Add(BaseObject objData)
  {
   return DataProxy.Add(objData);
  }
  public virtual bool IsExist(int id)
  {
   return this.DataProxy.IsExist(id);
  }
  public virtual BaseCollection GetItems()
  {
   return this.DataProxy.Load();
  }
  public virtual DataSet ToDataSet()
  {
   return this.DataProxy.ToDataSet();
  }

  #endregion

  #region ICollection 成員

  public bool IsSynchronized
  {
   get
   {
    // TODO:  添加 EOCollection.IsSynchronized getter 實現
    return false;
    
   }
  }

  public void CopyTo(Array array, int index)
  {
   // TODO:  添加 EOCollection.CopyTo 實現
  }

  public object SyncRoot
  {
   get
   {
    // TODO:  添加 EOCollection.SyncRoot getter 實現
    return null;
   }
  }

  #endregion

  #region IEnumerable 成員

  public virtual IEnumerator GetEnumerator()
  {
   // TODO:  添加 EOCollection.GetEnumerator 實現
   //return (IEnumerator) new EOCollection(this.Items);
   return this.Items.GetEnumerator();
  }
  public object Current
  {
   get
   {
    return Items[m_Index];
   }
  }
  
  public bool MoveNext()
  {
   m_Index++;
   return m_Index < Items.Count;
  }
  
  public void Reset()
  {
   m_Index = -1;
  } 
  #endregion

  #region 內存數據操作
  /// <summary>
  /// 添加Items集合的數據(到內存,暫時不提交到數據庫)
  /// </summary>
  /// <param name="obj"></param>
  public void AddToMemo(BaseObject obj)
  {
   Items.Add(obj);
  }
  /// <summary>
  /// 刪除items集合中的一行記錄
  /// </summary>
  /// <param name="obj">按對象的ID刪除</param>
  public void DeleteFromMemo(BaseObject obj)
  {
   Items.Remove(obj);
  }
  /// <summary>
  /// 刪除items集合中的一行記錄
  /// </summary>
  /// <param name="id">按對象的ID刪除</param>
  public void DeleteFromMemo(int id)
  {
   BaseObject obj = BaseObject.New();
   obj.ID = id;
   DeleteFromMemo(obj);
  }
  /// <summary>
  /// 對items集合指定的字段排序
  /// </summary>
  /// <param name="fieldName">要排序的字段名稱</param>
  public virtual void Sort(string fieldName)
  {
   Items.Sort(new BaseSort(fieldName));
  
  }
  public virtual void Sort()
  {
   Items.Sort();
  }
  public virtual void Sort(bool isDesc)
  {
   Items.Sort();
   if (isDesc)
   {
    Items.Reverse();
   }
  }
  /// <summary>
  ///  對items集合指定的字段排序
  /// </summary>
  /// <param name="fieldName">要排序的字段名稱</param>
  /// <param name="isDesc">是否降序排列</param>
  public virtual void Sort(string fieldName,bool isDesc)
  {
   Sort(fieldName);
   if (isDesc)
   {
    Items.Reverse();
   }
  }
  #endregion
  #region 檢索內存中的對象

  public int IndexOf(object obj)
  {
   return Items.IndexOf(obj);
  }
  
  
  #endregion
  #region 數據庫內存交互操作
  public virtual void Refresh()
  {
   
   
  }
  public virtual void Submit()
  {
   if (IsModify)
   {
    foreach(BaseObject obj in this.Items)
    {
     if (obj.IsModify)
     {
      this.DataProxy.Update(obj);
     }
    }
   }
  }
  #endregion
 }
}
排序對象:
using System;
using System.Collections;
using System.Reflection;

namespace VUser.ECommerce.Core
{
 /// <summary>
 /// BaseSort 的摘要說明。
 /// </summary>
 public class BaseSort : IComparer
 {
  private string m_SortFieldName;
  public BaseSort(string fieldName)
  {
   m_SortFieldName = fieldName;
  }
  public virtual int CompareField(object x,object y)
  {
   try
   {
    Type typex = x.GetType();
    Type typey = y.GetType();
    //Get each property by name
    PropertyInfo pix = typex.GetProperty(m_SortFieldName);
    PropertyInfo piy = typey.GetProperty(m_SortFieldName);
    //Get the value of the property for each object
    IComparable pvalx = (IComparable)pix.GetValue(x, null);
    
    object pvaly = piy.GetValue(y, null);
    
    //Compare values, using IComparable interface of the property's type
    return pvalx.CompareTo(pvaly);
   }
   catch// if x or y is null value then return -1
   {
    return -1;
   }
  }
  
  #region IComparer 成員

  public virtual int Compare(object x, object y)
  {
   // TODO:  添加 BaseSort.Compare 實現
   return CompareField(x,y);
  }

  #endregion
 }
}

應用示例:

排序集合示例(1)
public void DataBindControl(int pagei)
  {
   NewClassDataProxy obj = new NewClassDataProxy();
   NewClassCollection coll = (NewClassCollection)(obj.GetItems());
   
   
   
   
//調用BaseSort 對象進行排序
   coll.Sort("ID");
    or//coll.Sort(“Title“);

   
   this.DataGrid1.DataSource = (NewClassCollection)coll;
   this.DataGrid1.CurrentPageIndex = pagei;
   this.DataGrid1.DataBind();
  }


\排序集合示例(2)
private void Button3_Click(object sender, System.EventArgs e)
  {
   NewClassDataProxy obj = new NewClassDataProxy();
   NewClassCollection coll = (NewClassCollection)(obj.GetItems());
   
   //調用默認的定義排序接口實現(IComparable)
   coll.SetSortFieldName = "ID";
   
   coll.Sort();
   this.DataGrid1.DataSource = (NewClassCollection)coll;
   this.DataGrid1.DataBind();
  }



頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
最新評論 查看所有評論
發表評論 查看所有評論
請自覺遵守互聯網相關的政策法規,嚴禁發佈色情、暴力、反動的言論。
評價:
表情:
用戶名: 密碼: 驗證碼:
推薦內容