我做了一个继承自repeater的控件pager_repeater,主要是实现分页功能
pager_repeater的datasource为IList接口
在web页面中,我利用模版列来读取数据,行如<%#DataBinder.Eval(Container.DataItem,"id")%>
但是我现在只有datareader数据源,该如何给pager_repeater提供数据源呢?

解决方案 »

  1.   

    我开始利用ArrayList、Queue来读取datareader中的内容
    但是ArrayList没有列名,所以就不能再pager_repeater中绑定
    该怎么办呢,高手帮忙
      

  2.   

    没觉的哪值得看啊为啥不用datatable
      

  3.   

    自己建个DataTable指定一下列名读入datareader中的数据再绑定
      

  4.   

    哦!
    对,转化为DataTable好
    我试下
      

  5.   

    可以用arraylist,arraylist中存储一个简单的对像就行,应该比datatable效率高
    ArrayList values = new ArrayList();
    while(reader.Read())
    {
    values.Add(new myobject(reader["id"]/*,...other cols*/));
    }
    然后新建一个myobjcet类,公布一个构造函数和一些只读属性
    public class myobject
    {
    privae string _id;
    //other properties
    public myobject(string id/*,...other cols*/)
    {
    _id = id;
    //other properties
    }
    public string id
    {
    get {return _id;}
    }
    //other properties
    }
    //绑定数据
    <%#DataBinder.Eval(Container.DataItem,"id")%>
    这样就ok了
      

  6.   

    转化成datatable也行,不过datatable有点走回头路,你读取数据时,直接读成datatable,不就行了,把datareader再转成datatable,多傻啊
      

  7.   

    同意楼上的,定义个model嘛.
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            Model info = new Model();
                            if (reader[0] != DBNull.Value)
                                info.Name = reader.GetString(0);
                            if (reader[1] != DBNull.Value)
                                info.ID = reader.GetInt64(1);
                            if (reader[2] != DBNull.Value)
                                info.Date = reader.GetDateTime(2);                        list.Add(vfInfo);
                        }
                    }
    如果转为DataTable,则可以DataTable.Load (IDataReader) (2.0)