How to Get DisplayName in Metadata (LINQ)

How to Get DisplayName in Metadata (LINQ)

今天在寫匯出EXCEL功能的時候(這個功能真的是使用者人人愛耶…,工程師寫法還百百款),找到一篇是LINQ的IQueryable物件的寫法(其實跟datatable沒什麼二樣),不過比較重點的是,他是利用IQueryable取回MetaType之後,再去找所有的欄位名稱。因為之前沒有這樣用過,特別記一下。

一般宣告Metadata的方式:


public partial class Product {
}

class Product_Metadata {
    [DisplayName("The Units In Stock")]
    public object UnitsInStock { get; set; }
}

然後我們就可以利用DataContext的MetaModel來找到我們要的欄位資料:取回 MetaType(_rows.ElementType= typeof(TableEntity))之後,在PersistentDataMembers裡面可以找到所有的欄位名稱。

 

不過麻煩的是,我並不是所有的欄位都要匯出(ex:系統編號),所以我又開始東翻西找…


foreach (PropertyDescriptor p in properties)
{
	if (p.DisplayName != "*")
		_titleDisplayName.Add(p.Name, p.DisplayName);
}

利用AssociatedMetadataTypeTypeDescriptionProvider可以取回該TableEntity的Metadata的資料,然後利用GetProperties就可以拿到DisplayName囉。

(不過其實有另外一個屬性ScaffoldColumn來調整欄位是否顯示,可是我還沒研究要怎麼用上去T_T,所以我就偷懶的把DisplayName設為"*"表示不顯示的欄位。)

 

相關連結:

Dynamic Data and Custom Metadata Providers

ASP.NET MVC Tip #2 - Create a custom Action Result that returns Microsoft Excel Documents

HOW TO:自訂資料模型中非內建資料型別的資料欄位外觀和行為

Using an Associated Metadata Class outside Dynamic Data

Dynamic Data and the Associated Metadata Class

 

Dotblogs 的標籤:,