您的位置:首页 > 其它

关于集合类的做法示例 实体类赋值 cnblogs

2010-01-22 10:31 344 查看

关于集合类的做法!

类工程:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: