上篇提到都流行orm了,後台都有代碼產生器了,難道前台還要自己寫代碼嗎?今天就說說利用反射機制自動綁定資料持久層的類吧!
protected override void OnItemDataBound(RepeaterItemEventArgs e)
{
foreach (Control var in e.Item.Controls)
{
Type tt = e.Item.DataItem.GetType();
System.Reflection.PropertyInfo _proInfo = tt.GetProperty(var.ID);
if (_proInfo != null)
{
text = _proInfo.GetValue(e.Item.DataItem, null) == null ? string.Empty : _proInfo.GetValue(e.Item.DataItem, null).ToString();
}
}
}
其實核心就這一段代碼,首先判斷綁定的實體類的類型。然後通過控制項的ID找到對應實體類中同名的屬性,並且獲得他的值。
其實這個太簡單啦沒啥好寫的。不過這裡有一個技巧。如果有個項目大部分列表中出現人員ID的時候就自動的轉換成人員名稱並且滑鼠點擊的時候彈出一個頁面。這時候可以寫一個介面來實現代碼的重用。
public interface ICustomItem
{
object DataItem{ get; set;}
}
然後再上面的迴圈中加入
if (var is ICustomItem)
{
(var as ICustomItem).DataItem = e.Item.DataItem;
}
在具體的項目中只要實現這個介面,這個Repeater就會按照你的要求自動的綁定資料並顯示出來啦。
順便說一下:其實GirdView也可以實現自動綁定的功能,但我總覺得GirdView太龐大了,做Web前台的話實在是吃不消。所以我很喜歡Repeater這種輕量級的。