轉(zhuǎn)帖|其它|編輯:郝浩|2010-09-19 11:43:38.000|閱讀 930 次
概述:本文的意義并不僅僅是為了說明如何將IList轉(zhuǎn)換為DataTable,而是給出一個利用反射來實現(xiàn)對各種數(shù)據(jù)結(jié)構(gòu)(集合類)相互轉(zhuǎn)換的通用方法的編寫思路。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
本文的意義并不僅僅是為了說明如何將IList轉(zhuǎn)換為DataTable,而是給出一個利用反射來實現(xiàn)對各種數(shù)據(jù)結(jié)構(gòu)(集合類)相互轉(zhuǎn)換的通用方法的編寫思路。
相信很多使用過Nhibernate的朋友都知道,通過NH訪問數(shù)據(jù)庫,數(shù)據(jù)都是以ILIST形式返回的,這就為我們在.NET中使用傳統(tǒng)的數(shù)據(jù)綁定造成了不便。由于NH返回的ILIST所裝載的對象往往都是不同的,我們會為每個返回的LIST單獨編寫轉(zhuǎn)換方法,而利用反射機制卻可以做成通用的轉(zhuǎn)換方法。
代碼如下(C#):
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using System.Reflection;
namespace KycBaseModule
...{
public class KycFunction
...{
public KycFunction() ...{ }
/**//// <summary>
/// 實現(xiàn)對IList到DataSet的轉(zhuǎn)換
/// </summary>
/// <param name="ResList">待轉(zhuǎn)換的IList</param>
/// <returns>轉(zhuǎn)換后的DataSet</returns>
public static DataSet ListToDataSet(IList ResList)
...{
DataSet RDS=new DataSet();
DataTable TempDT = new DataTable();
//此處遍歷IList的結(jié)構(gòu)并建立同樣的DataTable
System.Reflection.PropertyInfo[] p = ResList[0].GetType().GetProperties();
foreach (System.Reflection.PropertyInfo pi in p)
...{
TempDT.Columns.Add(pi.Name,System.Type.GetType(pi.PropertyType.ToString()));
}
for (int i = 0; i < ResList.Count; i++)
...{
IList TempList = new ArrayList();
//將IList中的一條記錄寫入ArrayList
foreach (System.Reflection.PropertyInfo pi in p)
...{
object oo = pi.GetValue(ResList[i], null);
TempList.Add(oo);
}
object[] itm=new object[p.Length];
//遍歷ArrayList向object[]里放數(shù)據(jù)
for (int j = 0; j < TempList.Count; j++)
...{
itm.SetValue(TempList[j], j);
}
//將object[]的內(nèi)容放入DataTable
TempDT.LoadDataRow(itm, true);
}
//將DateTable放入DataSet
RDS.Tables.Add(TempDT);
//返回DataSet
return RDS;
}
}
}
由上面的代碼可以看出,實現(xiàn)的過程非常簡單。首先利用反射,將傳入方法的IList中的對象所包含的屬性進行獲取,然后根據(jù)獲取的屬性建立DataTable的Columns,然后利用循環(huán)遍歷整個IList,將每個結(jié)點對象所包含的內(nèi)容依次復(fù)制到DataTable。由于該代碼取自真實的項目模塊,所以保留了原有的命名空間和將DataTable放入Dataset的幾行。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:網(wǎng)絡(luò)轉(zhuǎn)載