數組轉DataTable通用類

來源:互聯網
上載者:User

在最近做的一個案子裡,需要綁定實體數組比如Materiel[]綁定到介面(winform/webform都有),雖然可以直接綁定數組到GridView,但排序,過濾,尋找等操作在數組裡不是很方便。所以想借用DataTable做資料來源。

最簡單的方法就是手動建一個DataTable。為每個Materiel的property建一個Column,然後指明其資料類型。建好Table之後,迴圈為每個Materiel建立一個新行。如果多有幾個介面,雖然做起來都差不多,但代碼很難重用。

另外資料都是從WebService擷取,form不允許直接存取DB,所以也不能通過ADO.net擷取DataTable。

經過一段時間的考量後決定見一個專用的Utility類EntityCollectionsConvert,介面為

 

DataTable ToDataTable(object[] entitys);

DataTable ToDataTable<T>(List<T> entitys)

實現的原理也比較簡單

1.將判斷entitys不為空白;

2.取出entitys的所有property

3.在DataTable中為每個property添加一列(包括元素類型)

4.為每個entity添加一行。

5.自動產生單元測試,測試,添加到項目中

1 public static DataTable ToDataTable<T>(List<T> entitys)<br /> 2 {<br /> 3<br /> 4 //檢查實體集合不可為空<br /> 5 if (entitys ==null|| entitys.Count<1)<br /> 6 {<br /> 7 throw new Exception("需轉換的集合為空白");<br /> 8 }<br /> 9<br />10 //取出第一個實體的所有Propertie<br />11 Type entityType= entitys[0].GetType();<br />12 PropertyInfo[] entityProperties= entityType.GetProperties();<br />13<br />14 //產生DataTable的structure<br />15 //生產代碼中,應將產生的DataTable結構Cache起來,此處略<br />16 DataTable dt = new DataTable();<br />17 for (int i = 0; i < entityProperties.Length; i++)<br />18 {<br />19 dt.Columns.Add(entityProperties[i].Name,entityProperties[i].PropertyType);<br />20 }<br />21<br />22 //將所有entity添加到DataTable中<br />23 foreach (object entity in entitys)<br />24 {<br />25 //檢查所有的的實體都為同一類型<br />26 if (entity.GetType()!=entityType)<br />27 {<br />28 throw new Exception("要轉換的集合元素類型不一致");<br />29 }<br />30 object[] entityValues = new object[entityProperties.Length];<br />31 for (int i = 0; i < entityProperties.Length; i++)<br />32 {<br />33 entityValues[i] = entityProperties[i].GetValue(entity, null);<br />34<br />35 }<br />36 dt.Rows.Add(entityValues);<br />37 }<br />38 return dt;<br />39 }<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.