数据库操作用的是LINQ,想用DataList进行分页,不知道该怎么写,还有,顺带问一下,泛型IList<>能直接用(DataTable)强制转换的嘛?求教

解决方案 »

  1.   

    linq分页本来就很简单啊  里面有个wake和skip的方法可以解决你分页的问题
    还有想用datatable来转换其实是可以了,要你相应的数据库的实体类
    ,具体转换可以看#region DataTable To List/Model
            /// <summary>
            /// DataTable To List
            /// </summary>
            /// <typeparam name="TType">object type</typeparam>
            /// <param name="dt">DataTable</param>
            /// <returns>return a List Model type</returns>
            public static List<T> DataTableToObjectList<T>(DataTable dt) where T : new()
            {
                DataRowCollection drc = dt.Rows;
                int columncount = drc.Count;
                List<T> result = new List<T>();    //declare the generic type of return 
                Type type = typeof(T);
                
                PropertyInfo[] propertys = type.GetProperties(BindingFlags.IgnoreCase|BindingFlags.Instance|BindingFlags.Public|BindingFlags.SetProperty);   //get the collections of the model
                foreach (DataRow r in drc)
                {
                    result.Add(DataRowToObjectModel<T>(r, propertys));
                }     
                return result;
                
            }
            
            /// <summary>
            /// DataRow To a Model
            /// </summary>
            /// <typeparam name="T">the type of Model</typeparam>
            /// <param name="r">DataRow</param>
            /// <param name="propertys">the object to Model</param>
            /// <returns>return a Model Type</returns>
            private static T DataRowToObjectModel<T>(DataRow r, PropertyInfo[] propertys) where T : new()
            {
                T t = new T();
                for (int i = 0; i < propertys.Length; i++)
                {
                    object obj = r[propertys[i].Name];
                    if (obj != null)
                    {
                        if (propertys[i].PropertyType == typeof(int))
                            propertys[i].SetValue(t, PublicMethod.GetInt(obj), null);
                        if (propertys[i].PropertyType == typeof(string))
                            propertys[i].SetValue(t, obj.ToString(), null);
                        if (propertys[i].PropertyType == typeof(DateTime))
                            propertys[i].SetValue(t, PublicMethod.GetDateTime(obj), null);
                    }
                }
                return t;
            }
            #endregion
      

  2.   

    泛型IList<>不能直接用(DataTable)强制转换、IList<>是以键值对的形式存在的。
      

  3.   

            int pageCount;
            int currentPage = 1;        DataView objView = dt.DefaultView; //表示自定义视图
            PagedDataSource pds = new PagedDataSource();//表示实例化  分页
            pds.DataSource =objView;
            pds.AllowPaging = true;允许分页
            pds.PageSize = 4;
            pageCount = pds.PageCount;//获取页总数
            this.Label4.Text = Convert.ToString(pageCount);
            pds.CurrentPageIndex = currentPage - 1;        this.Label2.Text = Convert.ToString(currentPage);         this.DataList1.DataSource = pds;
            this.DataList1.DataBind();
      

  4.   

        private void bind(int n, int m)//举个例子:用linq读取数据库中第n页的前m条记录
        {
            if (n < 0 || n > count)
                return;
            DataClassesDataContext dc = new DataClassesDataContext("server=.; integrated security=true;database=url");
            var source = (from temp in dc.Class1
                          orderby temp.id
                          select new
                          {
                              url = temp.url,
                              name = temp.name
                          }
            ).Skip(n * m).Take(m);
            ViewState["pageindex"] = n;
            txt_pageindex.Text = (n + 1).ToString();
            Repeater1.DataSource = source;
            Repeater1.DataBind();
            if (n == 0)
            {
                lb_prev.Enabled = false;
                lb_next.Enabled = true;
            }
            else if (n == count)
            {
                lb_prev.Enabled = true;
                lb_next.Enabled = false;
            }
            else
            {
                lb_prev.Enabled = true;
                lb_next.Enabled = true;
            }
        }
      
      

  5.   

    去MSDN查一下这个类PagedDataSource你就懂了。网上代码很多,贴给你也是别人的东西,还不如自己学习