【转】Repeater绑定泛型List

原文地址:http://www.cnblogs.com/fishtreeyu/archive/2011/03/11/1981068.html

 

把查询结果以DataTable 返回很方便,但是在检索数据时又很麻烦,没有模型类型 检索方便。

所以很多人都是按照以下方式做的:

// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ConvertToUserInfo(dt);

 问题:如果此系统有几十上百个模型,那不是每个模型中都要写个把DataTable转换为此模型的方法吗?
解决:能不能写个通用类,可以把DataTable转换为任何模型,呵呵,这就需要利用反射和泛型

   

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Reflection;
 
namespace NCL.Data
{
     /// <summary>
     /// 实体转换辅助类
     /// </summary>
     public class ModelConvertHelper<T> where   T : new ()
      {
         public static IList<T> ConvertToModel(DataTable dt)
          {
             // 定义集合
              IList<T> ts = new List<T>();
 
             // 获得此模型的类型
              Type type = typeof (T);
 
             string tempName = "" ;
 
             foreach (DataRow dr in dt.Rows)
              {
                  T t = new T();
 
                 // 获得此模型的公共属性
                  PropertyInfo[] propertys = t.GetType().GetProperties();
 
                 foreach (PropertyInfo pi in propertys)
                  {
                      tempName = pi.Name;
 
                     // 检查DataTable是否包含此列
                     if (dt.Columns.Contains(tempName))
                      {
                         // 判断此属性是否有Setter
                         if (!pi.CanWrite) continue ;
 
                         object value = dr[tempName];
                         if (value != DBNull.Value)
                              pi.SetValue(t, value, null );
                      }
                  }
 
                  ts.Add(t);
              }
 
             return ts;
 
          }
      }
}

使用方式:

// 获得查询结果
DataTable dt = DbHelper.ExecuteDataTable(...);
// 把DataTable转换为IList<UserInfo>
IList<UserInfo> users = ModelConvertHelper<UserInfo>.ConvertToModel(dt);

 

Repeater绑定泛型List<T>比绑定DataTable效率更高,而且绑定List<T>可以实现智能感应提示:

这里举例在Repeater中绑定泛型List<T>的用法:

 用<%#((Type)Container.DataItem).成员 %>可实现智能感应提示,而且比 <%# Eval("成员")%>效率更高!

后台.cs代码:

List<Model.OrderItems> orderItemList = new DAl.OrderItemsDAO().GetListArray( "OrderId = '" + orderId + "' order by Id desc" );
repList.DataSource = orderItemList;
repList.DataBind();

 

前台.aspx代码:

<asp:Repeater ID= "repList" runat= "server" >   
<ItemTemplate>   
     <tr>   
     <td class = "td02" ><a href= 'productcon.aspx?id=<%#Eval("ProductId") %>' target= "_blank" ><%#Eval( "ProductName" ) %></a></td>   
     <td align= "right" valign= "middle" class = "td02" >¥<%#((Model.OrderItems)Container.DataItem).UnitPrice %></td>   
     <td valign= "middle" class = "td02 colorgreg" ><%#((Model.OrderItems)Container.DataItem).Quantity%></td>   
     <td align= "right" class = "td02" >¥<%#((Model.OrderItems)Container.DataItem).TotalPrice %></td>   
     </tr>   
</ItemTemplate>   

</asp:Repeater>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值