关于集合类的做法!

类工程:
using System;
using System.Data;

namespace MyProduct.Employee
{
 /// <summary>
 /// Employee的实体类
 /// </summary>
 public class EmployeeEntity
 {
        private int mEmployeeID;
        private string mLastName;
        private string mFirstName;

        public int EmployeeID
        {
            get { return mEmployeeID; }
            set { mEmployeeID = value; }
        }
        public string LastName
        {
            get { return mLastName; }
            set { mLastName = value; }
        }
        public string FirstName
        {
            get { return mFirstName; }
            set { mFirstName = value; }
        }

  public EmployeeEntity()
  {
  
  }

        /// <summary>
        /// 构造函数,给实体类赋值
        /// </summary>
        /// <param name="pDR">DataRow</param>
        public EmployeeEntity(DataRow pDR)
        {
            Fill(pDR);
        }

        /// <summary>
        /// 给实体类赋值
        /// </summary>
        /// <param name="pDR">DataRow</param>
        public void Fill(DataRow pDR)
        {           
            foreach( System.Reflection.PropertyInfo pi in this.GetType().GetProperties())
            {
                if (pi.CanWrite)
                {
                    try
                    {
                        if (pDR[ pi.Name ] != null && !pDR.IsNull( pi.Name ) )
                        {     
                            pi.Setvalue(this, pDR[ pi.Name ], null);
                        }
                        else
                        {
                            pi.Setvalue(this, null, null);
                        }
                    }
                    catch
                    {
                        pi.Setvalue(this, null, null);
                    }
                }
            }
  
        }
 }


    /// <summary>
    /// Employee的集合类
    /// </summary>
    public class EmployeeList : System.Collections.CollectionBase
    {

        public EmployeeList()
        {
  
        }

        /// <summary>
        /// 构造函数,给集合类赋值
        /// </summary>
        /// <param name="pDT">DataTable</param>
        public EmployeeList(DataTable pDT)
        {
            Fill(pDT);
        }

        /// <summary>
        /// 给集合类赋值
        /// </summary>
        /// <param name="pDT">DataTable</param>
        public void Fill(DataTable pDT)
        {
            foreach(DataRow pDR in pDT.Rows)
            {
                this.InnerList.Add( new EmployeeEntity( pDR ) );
            }
        }

        /// <summary>
        /// 索引
        /// </summary>
        public virtual EmployeeEntity this[int Index]
        {
            get
            {
                return (EmployeeEntity)this.List[Index];
            }
        }

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="pEmp">实体类</param>
        public virtual void Add(EmployeeEntity pEmp)
        {
            this.List.Add(pEmp);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="Index">index</param>
        public virtual void Remove(int Index)
        {
            this.List.RemoveAt(Index);
        }
    }

    /// <summary>
    /// Employee业务类
    /// </summary>
    public class EmployeeRule
    {
        /// <summary>
        /// 获取所有
        /// </summary>
        /// <returns></returns>
        public EmployeeList GetAllEmployees()
        {
            string sql;
            sql="select * from employees";
            DataTable pDT=ExeForDtl(sql);

            EmployeeList emplist=new EmployeeList();           
            emplist.Fill(pDT);
            return emplist;
        }

        /// <summary>
        /// 获取一个
        /// </summary>
        /// <param name="pEmployeeID"></param>
        /// <returns></returns>
        public EmployeeEntity GetOneEmployee(int pEmployeeID)
        {
            string sql;
            sql="select * from employees where employeeid="+pEmployeeID;
          
            DataTable pDT=new DataTable();
            pDT=ExeForDtl(sql);
            if(pDT.Rows.Count>0)
            {
                return new EmployeeEntity(pDT.Rows[0]);
            }
            else
            {
                return null;
            }
        }
    }
}


Web工程:
这里的Web工程说明了怎样去调用我们写的集合类。

1。在DataGrid中使用集合类
直接绑定:
EmployeeRule empRule=new EmployeeRule();
DataGrid1.DataSource=empRule.GetAllEmployees();
DataGrid1.DataBind();

手工添加绑定:
EmployeeEntity emp=new EmployeeEntity();
emp.EmployeeID=10;
emp.FirstName="mike";
emp.LastName="daoson";
EmployeeList empList=new EmployeeList();
empList.Add(emp);
DataGrid1.DataSource=empList;
DataGrid1.DataBind();

2。给文本框赋值
EmployeeEntity emp=new EmployeeEntity();
emp=empRule.GetOneEmployee(1);
txtEmployeeID.Text=emp.EmployeeID.ToString();
txtFirstName.Text=emp.FirstName;
txtLastName.Text=emp.LastName;

下面讲一下此种方法的优缺点:
优点:
1。通过反射,循环给属性赋值,省去了给属性赋值的大量工作量
2。集合类可以直接绑定到DataGrid中
3。自己如果想构造一个虚拟的DataTable,可以通过集合类来做
4。这种方法可以用foreach做循环来检索出他的实体类
5。这里可以直接把datarow赋给实体类,也可以给实体类手工赋值

缺点:
1。数据库中的字段名必须要和实体类中的属性相一致
2。如果是多个表关联,那么集合类就不能绑定到DataGrid

 


 

posted @ 2004-06-14 13:18  Martin XJ  阅读(1279)  评论(1编辑  收藏  举报