关于集合类的做法示例 实体类赋值 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
相关文章推荐
- 关于 webservice 的SoapHeader 示例(赋值代码即可。)
- 关于集合类的做法!
- 关于集合类的做法!
- 一个讨论引发关于js中函数声明,函数表达式,形参与变量声明赋值引发的一些事(http://www.cnblogs.com/zhouyongtao/archive/2012/11/22/2783089)
- sql表关于列转行的做法
- 关于memset赋值无穷大无穷小
- 关于含有指针成员的类的对象之间赋值指针的问题。
- 关于控件赋值
- 关于Java中多线程死锁的代码示例
- 关于MVC使用Code-First代码优先来先建实体类中间添加新字段不需要重新建立数据库的方法
- 关于C#中readonly的变量赋值问题。
- 关于document.getElementById("xxx").innerHTML赋值错误问题
- 关于mysql下hibernate实体类字段与数据库关键字冲突的问题
- 关于全局变量赋值
- 关于C++中友元类和友元函数的示例讲解
- c# winform 关于给静态全局变量赋值的问题
- 关于北林复试题,如果给出的是无格式的txt的做法
- Google官方关于Android架构中MVP模式的示例续-DataBinding
- jquery关于select框的取值和赋值
- C语言关于结构体赋值的问题