手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Asp.Net编程>列表

Object/DataSet Relational Mapping(对象/数据集关系映射)

来源:互联网 作者:west263.com 时间:2008-02-22
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

using System.Web.UI.HtmlControls;

using IBatisNet.DataMapper;

using System.Reflection;

public partial class ODRM_test : PageBase

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

DataSet set11 = Mapper.Instance().QueryForDataSet("SelectXTM_UserByKey_Test",UIhashtable);

DataTable table1 = ConvertDataTable(set11, "");

//这里为自己定义的序列化类

cXTM_User[] objModel = new cXTM_User[table1.Rows.Count];

//DataTable转化为序列化类数组

for (int y = 0; y < table1.Rows.Count; y )

{

objModel[y] = new cXTM_User();

DataTableReturnOO(table1.Rows[y], objModel[y]);

}

//以DataSet模式绑定

ExDataGrid1.DataSource = table1;

//以序列化对象模式绑定

//ExDataGrid1.DataSource = objModel;

ExDataGrid1.DataBind();

}

}

protected void ExDataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)

{

/*

* 该部分应用范围

* 查询一条数据的修改,可以用objModel.UserName

* 而不必再使用DataTable[0].Rows[0]["UserName"]的模式

* 提高面向对象的程度,并减少业务流程部分编码

*/

if (e.Item.ItemIndex != -1)

{

cXTM_User objModel = new cXTM_User();

//如果为DataSet填充的DataGrid

if (e.Item.DataItem.GetType().FullName == "System.Data.DataRowView")

{

DataTableReturnOO((DataRow)((DataRowView)e.Item.DataItem).Row, objModel);

}

//否则认为为序列化对象填充

else

{

objModel = (cXTM_User)e.Item.DataItem;

}

}

}

/// <summary>

/// DataSet转化为序列化类函数,类定义参考cXTM_User

/// </summary>

private void DataTableReturnOO(DataRow row, cXTM_User objModel)

{

Hashtable hTable = new Hashtable();

hTable = ReturnHashtable(row);

Type entitytype = Type.GetType(objModel.GetType().AssemblyQualifiedName);

for (int j = 0; j < objModel.Propertylist.Length; j )

{

PropertyInfo propertyinfo = entitytype.GetProperty(objModel.Propertylist[j]);

propertyinfo.SetValue(objModel, hTable[objModel.Propertylist[j]], null);

}

}

/// <summary>

/// 转换为DataTable

/// </summary>

/// <param name="Source">数据源</param>

/// <param name="DataMember">数据表名称</param>

public static DataTable ConvertDataTable(object Source, string DataMember)

{

DataTable baseTable = new DataTable();

if (Source is DataTable)

{

baseTable = (DataTable)Source;

return baseTable;

}

if (Source is DataSet)

{

DataSet set1 = (DataSet)Source;

if ((set1.Tables.Count > 1) && ((DataMember == null) || (DataMember == "")))

{

throw new Exception("If there is more than one table in your dataset, you must define the DataMember property to specify which table to use.");

}

if (set1.Tables.Count < 1)

{

throw new Exception("There are no tables in the datasource.");

}

if ((DataMember != null) && (DataMember != ""))

{

baseTable = set1.Tables[DataMember];

return baseTable;

}

else

{

baseTable = set1.Tables[0];

return baseTable;

}

}

return baseTable;

}

/// <summary>

/// 返回DataTable为哈希表键值对

/// </summary>

/// <param name="SourceTable">数据行对象</param>

/// <returns></returns>

public static Hashtable ReturnHashtable(DataRow SourceRow)

{

Hashtable hTable = new Hashtable();

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!