如何在ListView的ItemCreated事件中存取由LINQ查詢所查詢的匿名型別
C# 3.0以後新增了var隱含型別區域變數,雖然不需事先定義變數的型別,但實際上編譯器還是會自行判斷型別,實務上常用var來接收LINQ查詢的結果,例如下列的程式碼:
1: Listview1.DataSource = from p in context.Regions
2: select new { p.RegionID, Reg = p };
3: Listview1.DataBind();
若要在ListView的ItemCreated事件中取得Regions的實體(Reg),由於var區域變數是會由編譯器自行判斷型別,因此只要把別名Reg在DataItem中轉成正確的Region型別即可存取其中的屬性,程式碼如下:
1: protected void Listview1_ItemCreated(object sender, ListViewItemEventArgs e)
2: {
3: if (e.Item.ItemType == ListViewItemType.DataItem)
4: {
5: Region reg = DataBinder.Eval(e.Item.DataItem, "Reg") as Region;
6: Response.Write(string.Format("RegionID={0},RegionDescription={1}<hr/>", reg.RegionID, reg.RegionDescription));
7: }
8: }
PS:感謝BillChuang前輩的提醒,及時將本文錯誤引用的部分更正過來。
【參考資料】