ExtJs学习笔记(6)_可分页的GridPanel2010-11-16 cnblogs yjmyzz一.WCF部分1.通过查看官方的示例得知,分页数据源需要一个记录总数值,为保持通用性,这里借鉴jillZhang的文章http://www.cnblogs.com/jillzhang/archive/2008/06/29/1232086.html,把他写的通用类PageData拿过来直接用
1 using System;
2 using System.Runtime.Serialization;
3
4 namespace Ajax_WCF
5 {
6 [DataContract]
7 public class PageData<T>
8 {
9 [DataMember]
10 public int TotolRecord
11 { get; set;}
12
13 [DataMember]
14 public T Data
15 { get; set; }
16 }
17 }
2.服务端的WCF方法:GetDataByPage
[OperationContract]
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json,UriTemplate = "GetDataByPage?start={start}&limit={limit}")]
public PageData<T_Class[]> GetDataByPage(int start, int limit)
{
PageData<T_Class[]> _Result = new PageData<T_Class[]>();
using (DBDataContext db = new DBDataContext())
{
try
{
IQueryable<T_Class> query = db.T_Classes;
_Result.TotolRecord = query.Count();
var query2 = query.OrderBy(c => c.F_RootID).ThenBy(c => c.F_Orders).Select(c => new { F_ID = c.F_ID, F_ClassName = c.F_ClassName, F_ParentID =
c.F_ParentID, F_Orders = c.F_Orders, F_ReadMe = c.F_ReadMe }).Skip(start).Take(limit);
_Result.Data = db.ExecuteQuery<T_Class>(query2, true).ToArray<T_Class>();
}
catch { }
db.Connection.Close();
}
return _Result;
}
这里讲一个小技巧,也是从jillZhang那里学过来的,以前默认在linq to sql(dbml)设计器里拖出来的类,默认生成的代码是不支持序列化的,我们只能手动添加[DataContract]和[DataMember],其实系统可以自动生成的,方法是在dbml的属性栏里设置"序列化模式"为"单向",如下图: