Object/DataSet Relational Mapping(对象/数据集…

2008-02-22 09:40:18来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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();

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:ASP.NET组件DataGrid的分页实用方法

下一篇:Access数据库在asp.net程序中相对路径的解决方法