ORM框架实现数据的自动绑定添加修改 <二>
间隔上篇文章ORM框架实现数据的自动绑定添加修改 <一> 两个月了才写这个二,实在是最近没心情写关于技术的博客啊,刚研究出来的时候蛮兴奋,过了兴奋期就不想提啦。上次写文章就是因为股票暴跌,这次也是暴跌,换换脑子吧。
上篇提到都流行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();
}
}
}
{
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就会按照你的要求自动的绑定数据并显示出来啦。
今天一口气写了两篇关于偷懒的文章,精神可嘉啊。下篇写关于自动添加的控件啦,这个是重头戏,在数据添加和修改的时候特别方便,基本上能达到不写代码就可以实现。