摘要:C# - Entities To DataTable
前幾天在開發程式寫了一個 Entities 的程式,之後又在前端自行定義了 DataTable 的 Column,結果被一位很有經驗的老手指點了一下。他說:「幹啥要做苦工呢!? 為什麼不要寫個 Function 來將 Entities 轉成 DataTable 呢!?」,當聽到他說這句話後,想一想為啥要做這樣的苦工,既然之後專案都會用到,那這樣做才是對的,果然老手的是對的,以下就來實作唄...
步驟一:建立一個方案,並且各別再加入一個 類別庫 與 WinForm 專案
步驟二:建立 Entities 程式碼,並且建置專案
Code:
namespace TestFunction
{
public class EntitiesClass1
{
public int MyColmunProperty1 { get; set; }
public string MyColmunProperty2 { get; set; }
public DateTime MyColmunProperty3 { get; set; }
}
}
步驟三:將 EntitiesClass 專案的 dll 加入到 WunForm 專案的參考中
步驟四:設計 WinForm 的畫面,並且拉進一個 BindingSource 物件
步驟五:將 Entities 設定到 BindingSource 中
步驟六:將 DataGridView 的資料來源指向到 BindingSource
步驟七:撰寫 WinForm 程式碼
Code:
using System.Reflection;
namespace TestFunction
{
public partial class Form1 : Form
{
DataTable dt;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
EntitiesClass1 ec = new EntitiesClass1();
dt = EntitiesToDataTable(ec);
dataGridView1.DataSource = dt;
}
/// <summary>
/// 將 Entities 轉換成 DataTable
/// </summary>
/// <typeparam name="T">實體型別</typeparam>
/// <param name="EntitiesClass">實體類別</param>
/// <returns></returns>
public DataTable EntitiesToDataTable<T>(T EntitiesClass)
{
//取得 Entities Class 的名稱
string EC_Name = EntitiesClass.GetType().Name;
//依據傳 Entities Class 的名稱來建立一個回傳的 DataTable
DataTable dt = new DataTable(EC_Name);
//取得 Entities 的類型
Type t = EntitiesClass.GetType();
//取得 Entities 的屬性
PropertyInfo[] entityProperties = t.GetProperties();
//建立 DataTable 的 欄位,並且將 Entities 的 名稱 與 型別 指定給欄位
for (int i = 0; i < entityProperties.Length; i++)
{
dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
}
return dt;
}
private void button1_Click(object sender, EventArgs e)
{
string showData = string.Empty;
foreach (DataRow item in dt.Rows)
{
MessageBox.Show(item.Field<int>(0).ToString()
+ "===" + item.Field<string>(1).ToString()
+ "===" + item.Field<DateTime>(2).ToShortDateString());
}
}
}
}
結果:
參考:
LINQ - DataTable 與 List<TResult> 轉換