ExtJs+WCF+LINQ实现分页Grid
自动生成的实体类Product并不支持作为WCF的数据类,必须手动对其添加DataContract和DataMember,添加后的代码如下:
#pragma warning disable 1591 
//------------------------------------------------------------------------------ 
//  
// 此代码由工具生成。 
// 运行库版本:2.0.50727.1433 
// 
// 对此文件的更改可能会导致不正确的行为,并且如果 
// 重新生成代码,这些更改将会丢失。 
//  
//------------------------------------------------------------------------------ 
 
namespace ExtJs_Wcf_Linq_PageGrid 


{ 
    using System.Data.Linq; 
    using System.Data.Linq.Mapping; 
    using System.Data; 
    using System.Collections.Generic; 
    using System.Reflection; 
    using System.Linq; 
    using System.Linq.Expressions; 
    using System.ComponentModel; 
    using System; 
using System.Runtime.Serialization; 
      
     
    [System.Data.Linq.Mapping.DatabaseAttribute(Name="AdventureWorks")] 
    public partial class ProductsDataContext : System.Data.Linq.DataContext 

    
{ 
         
        private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); 
         

Extensibility Method Definitions#region Extensibility Method Definitions 
partial void OnCreated(); 
partial void InsertProduct(Product instance); 
partial void UpdateProduct(Product instance); 
partial void DeleteProduct(Product instance); 
#endregion 
         
        public ProductsDataContext() : 
                base(global::System.Configuration.ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ConnectionString, mappingSource) 

        
{ 
            OnCreated(); 
        } 
         
        public ProductsDataContext(string connection) : 
                base(connection, mappingSource) 

        
{ 
            OnCreated(); 
        } 
         
        public ProductsDataContext(System.Data.IDbConnection connection) : 
                base(connection, mappingSource) 

        
{ 
            OnCreated(); 
        } 
         
        public ProductsDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
                base(connection, mappingSource) 

        
{ 
            OnCreated(); 
        } 
         
        public ProductsDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : 
                base(connection, mappingSource) 

        
{ 
            OnCreated(); 
        } 
         
        public System.Data.Linq.Table<Product> Product 

        
{ 
            get 

            
{ 
                return this.GetTable<Product>(); 
            } 
        } 
    } 
     
    [Table(Name="Production.Product")] 
[DataContract] 
    public partial class Product : INotifyPropertyChanging, INotifyPropertyChanged 

    
{ 
         
        private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 
         
        private int _ProductID; 
         
        private string _Name; 
         
        private string _ProductNumber; 
         
        private bool _MakeFlag; 
         
        private bool _FinishedGoodsFlag; 
         
        private string _Color; 
         
        private short _SafetyStockLevel; 
         
        private short _ReorderPoint; 
         
        private decimal _StandardCost; 
         
        private decimal _ListPrice; 
         
        private string _Size; 
         
        private string _SizeUnitMeasureCode; 
         
        private string _WeightUnitMeasureCode; 
         
        private System.Nullable<decimal> _Weight; 
         
        private int _DaysToManufacture; 
         
        private string _ProductLine; 
         
        private string _Class; 
         
        private string _Style; 
         
        private System.Nullable<int> _ProductSubcategoryID; 
         
        private System.Nullable<int> _ProductModelID; 
         
        private System.DateTime _SellStartDate; 
         
        private System.Nullable<System.DateTime> _SellEndDate; 
         
        private System.Nullable<System.DateTime> _DiscontinuedDate; 
         
        private System.Guid _rowguid; 
         
        private System.DateTime _ModifiedDate; 
         

Extensibility Method Definitions#region Extensibility Method Definitions 
partial void OnLoaded(); 
partial void OnValidate(System.Data.Linq.ChangeAction action); 
partial void OnCreated(); 
partial void OnProductIDChanging(int value); 
partial void OnProductIDChanged(); 
partial void OnNameChanging(string value); 
partial void OnNameChanged(); 
partial void OnProductNumberChanging(string value); 
partial void OnProductNumberChanged(); 
partial void OnMakeFlagChanging(bool value); 
partial void OnMakeFlagChanged(); 
partial void OnFinishedGoodsFlagChanging(bool value); 
partial void OnFinishedGoodsFlagChanged(); 
partial void OnColorChanging(string value); 
partial void OnColorChanged(); 
partial void OnSafetyStockLevelChanging(short value); 
partial void OnSafetyStockLevelChanged(); 
partial void OnReorderPointChanging(short value); 
partial void OnReorderPointChanged(); 
partial void OnStandardCostChanging(decimal value); 
partial void OnStandardCostChanged(); 
partial void OnListPriceChanging(decimal value); 
partial void OnListPriceChanged(); 
partial void OnSizeChanging(string value); 
partial void OnSizeChanged(); 
partial void OnSizeUnitMeasureCodeChanging(string value); 
partial void OnSizeUnitMeasureCodeChanged(); 
partial void OnWeightUnitMeasureCodeChanging(string value); 
partial void OnWeightUnitMeasureCodeChanged(); 
partial void OnWeightChanging(System.Nullable<decimal> value); 
partial void OnWeightChanged(); 
partial void OnDaysToManufactureChanging(int value); 
partial void OnDaysToManufactureChanged(); 
partial void OnProductLineChanging(string value); 
partial void OnProductLineChanged(); 
partial void OnClassChanging(string value); 
partial void OnClassChanged(); 
partial void OnStyleChanging(string value); 
partial void OnStyleChanged(); 
partial void OnProductSubcategoryIDChanging(System.Nullable<int> value); 
partial void OnProductSubcategoryIDChanged(); 
partial void OnProductModelIDChanging(System.Nullable<int> value); 
partial void OnProductModelIDChanged(); 
partial void OnSellStartDateChanging(System.DateTime value); 
partial void OnSellStartDateChanged(); 
partial void OnSellEndDateChanging(System.Nullable<System.DateTime> value); 
partial void OnSellEndDateChanged(); 
partial void OnDiscontinuedDateChanging(System.Nullable<System.DateTime> value); 
partial void OnDiscontinuedDateChanged(); 
partial void OnrowguidChanging(System.Guid value); 
partial void OnrowguidChanged(); 
partial void OnModifiedDateChanging(System.DateTime value); 
partial void OnModifiedDateChanged(); 
#endregion 
         
        public Product() 

        
{ 
            OnCreated(); 
        } 
        [DataMember] 
        [Column(Storage="_ProductID", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)] 
        public int ProductID 

        
{ 
            get 

            
{ 
                return this._ProductID; 
            } 
            set 

            
{ 
                if ((this._ProductID != value)) 

                
{ 
                    this.OnProductIDChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ProductID = value; 
                    this.SendPropertyChanged("ProductID"); 
                    this.OnProductIDChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Name", DbType="NVarChar(50) NOT NULL", CanBeNull=false)] 
        public string Name 

        
{ 
            get 

            
{ 
                return this._Name; 
            } 
            set 

            
{ 
                if ((this._Name != value)) 

                
{ 
                    this.OnNameChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Name = value; 
                    this.SendPropertyChanged("Name"); 
                    this.OnNameChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ProductNumber", DbType="NVarChar(25) NOT NULL", CanBeNull=false)] 
        public string ProductNumber 

        
{ 
            get 

            
{ 
                return this._ProductNumber; 
            } 
            set 

            
{ 
                if ((this._ProductNumber != value)) 

                
{ 
                    this.OnProductNumberChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ProductNumber = value; 
                    this.SendPropertyChanged("ProductNumber"); 
                    this.OnProductNumberChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_MakeFlag", DbType="Bit NOT NULL")] 
        public bool MakeFlag 

        
{ 
            get 

            
{ 
                return this._MakeFlag; 
            } 
            set 

            
{ 
                if ((this._MakeFlag != value)) 

                
{ 
                    this.OnMakeFlagChanging(value); 
                    this.SendPropertyChanging(); 
                    this._MakeFlag = value; 
                    this.SendPropertyChanged("MakeFlag"); 
                    this.OnMakeFlagChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_FinishedGoodsFlag", DbType="Bit NOT NULL")] 
        public bool FinishedGoodsFlag 

        
{ 
            get 

            
{ 
                return this._FinishedGoodsFlag; 
            } 
            set 

            
{ 
                if ((this._FinishedGoodsFlag != value)) 

                
{ 
                    this.OnFinishedGoodsFlagChanging(value); 
                    this.SendPropertyChanging(); 
                    this._FinishedGoodsFlag = value; 
                    this.SendPropertyChanged("FinishedGoodsFlag"); 
                    this.OnFinishedGoodsFlagChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Color", DbType="NVarChar(15)")] 
        public string Color 

        
{ 
            get 

            
{ 
                return this._Color; 
            } 
            set 

            
{ 
                if ((this._Color != value)) 

                
{ 
                    this.OnColorChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Color = value; 
                    this.SendPropertyChanged("Color"); 
                    this.OnColorChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_SafetyStockLevel", DbType="SmallInt NOT NULL")] 
        public short SafetyStockLevel 

        
{ 
            get 

            
{ 
                return this._SafetyStockLevel; 
            } 
            set 

            
{ 
                if ((this._SafetyStockLevel != value)) 

                
{ 
                    this.OnSafetyStockLevelChanging(value); 
                    this.SendPropertyChanging(); 
                    this._SafetyStockLevel = value; 
                    this.SendPropertyChanged("SafetyStockLevel"); 
                    this.OnSafetyStockLevelChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ReorderPoint", DbType="SmallInt NOT NULL")] 
        public short ReorderPoint 

        
{ 
            get 

            
{ 
                return this._ReorderPoint; 
            } 
            set 

            
{ 
                if ((this._ReorderPoint != value)) 

                
{ 
                    this.OnReorderPointChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ReorderPoint = value; 
                    this.SendPropertyChanged("ReorderPoint"); 
                    this.OnReorderPointChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_StandardCost", DbType="Money NOT NULL")] 
        public decimal StandardCost 

        
{ 
            get 

            
{ 
                return this._StandardCost; 
            } 
            set 

            
{ 
                if ((this._StandardCost != value)) 

                
{ 
                    this.OnStandardCostChanging(value); 
                    this.SendPropertyChanging(); 
                    this._StandardCost = value; 
                    this.SendPropertyChanged("StandardCost"); 
                    this.OnStandardCostChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ListPrice", DbType="Money NOT NULL")] 
        public decimal ListPrice 

        
{ 
            get 

            
{ 
                return this._ListPrice; 
            } 
            set 

            
{ 
                if ((this._ListPrice != value)) 

                
{ 
                    this.OnListPriceChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ListPrice = value; 
                    this.SendPropertyChanged("ListPrice"); 
                    this.OnListPriceChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Size", DbType="NVarChar(5)")] 
        public string Size 

        
{ 
            get 

            
{ 
                return this._Size; 
            } 
            set 

            
{ 
                if ((this._Size != value)) 

                
{ 
                    this.OnSizeChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Size = value; 
                    this.SendPropertyChanged("Size"); 
                    this.OnSizeChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_SizeUnitMeasureCode", DbType="NChar(3)")] 
        public string SizeUnitMeasureCode 

        
{ 
            get 

            
{ 
                return this._SizeUnitMeasureCode; 
            } 
            set 

            
{ 
                if ((this._SizeUnitMeasureCode != value)) 

                
{ 
                    this.OnSizeUnitMeasureCodeChanging(value); 
                    this.SendPropertyChanging(); 
                    this._SizeUnitMeasureCode = value; 
                    this.SendPropertyChanged("SizeUnitMeasureCode"); 
                    this.OnSizeUnitMeasureCodeChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_WeightUnitMeasureCode", DbType="NChar(3)")] 
        public string WeightUnitMeasureCode 

        
{ 
            get 

            
{ 
                return this._WeightUnitMeasureCode; 
            } 
            set 

            
{ 
                if ((this._WeightUnitMeasureCode != value)) 

                
{ 
                    this.OnWeightUnitMeasureCodeChanging(value); 
                    this.SendPropertyChanging(); 
                    this._WeightUnitMeasureCode = value; 
                    this.SendPropertyChanged("WeightUnitMeasureCode"); 
                    this.OnWeightUnitMeasureCodeChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Weight", DbType="Decimal(8,2)")] 
        public System.Nullable<decimal> Weight 

        
{ 
            get 

            
{ 
                return this._Weight; 
            } 
            set 

            
{ 
                if ((this._Weight != value)) 

                
{ 
                    this.OnWeightChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Weight = value; 
                    this.SendPropertyChanged("Weight"); 
                    this.OnWeightChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_DaysToManufacture", DbType="Int NOT NULL")] 
        public int DaysToManufacture 

        
{ 
            get 

            
{ 
                return this._DaysToManufacture; 
            } 
            set 

            
{ 
                if ((this._DaysToManufacture != value)) 

                
{ 
                    this.OnDaysToManufactureChanging(value); 
                    this.SendPropertyChanging(); 
                    this._DaysToManufacture = value; 
                    this.SendPropertyChanged("DaysToManufacture"); 
                    this.OnDaysToManufactureChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ProductLine", DbType="NChar(2)")] 
        public string ProductLine 

        
{ 
            get 

            
{ 
                return this._ProductLine; 
            } 
            set 

            
{ 
                if ((this._ProductLine != value)) 

                
{ 
                    this.OnProductLineChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ProductLine = value; 
                    this.SendPropertyChanged("ProductLine"); 
                    this.OnProductLineChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Class", DbType="NChar(2)")] 
        public string Class 

        
{ 
            get 

            
{ 
                return this._Class; 
            } 
            set 

            
{ 
                if ((this._Class != value)) 

                
{ 
                    this.OnClassChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Class = value; 
                    this.SendPropertyChanged("Class"); 
                    this.OnClassChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_Style", DbType="NChar(2)")] 
        public string Style 

        
{ 
            get 

            
{ 
                return this._Style; 
            } 
            set 

            
{ 
                if ((this._Style != value)) 

                
{ 
                    this.OnStyleChanging(value); 
                    this.SendPropertyChanging(); 
                    this._Style = value; 
                    this.SendPropertyChanged("Style"); 
                    this.OnStyleChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ProductSubcategoryID", DbType="Int")] 
        public System.Nullable<int> ProductSubcategoryID 

        
{ 
            get 

            
{ 
                return this._ProductSubcategoryID; 
            } 
            set 

            
{ 
                if ((this._ProductSubcategoryID != value)) 

                
{ 
                    this.OnProductSubcategoryIDChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ProductSubcategoryID = value; 
                    this.SendPropertyChanged("ProductSubcategoryID"); 
                    this.OnProductSubcategoryIDChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ProductModelID", DbType="Int")] 
        public System.Nullable<int> ProductModelID 

        
{ 
            get 

            
{ 
                return this._ProductModelID; 
            } 
            set 

            
{ 
                if ((this._ProductModelID != value)) 

                
{ 
                    this.OnProductModelIDChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ProductModelID = value; 
                    this.SendPropertyChanged("ProductModelID"); 
                    this.OnProductModelIDChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_SellStartDate", DbType="DateTime NOT NULL")] 
        public System.DateTime SellStartDate 

        
{ 
            get 

            
{ 
                return this._SellStartDate; 
            } 
            set 

            
{ 
                if ((this._SellStartDate != value)) 

                
{ 
                    this.OnSellStartDateChanging(value); 
                    this.SendPropertyChanging(); 
                    this._SellStartDate = value; 
                    this.SendPropertyChanged("SellStartDate"); 
                    this.OnSellStartDateChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_SellEndDate", DbType="DateTime")] 
        public System.Nullable<System.DateTime> SellEndDate 

        
{ 
            get 

            
{ 
                return this._SellEndDate; 
            } 
            set 

            
{ 
                if ((this._SellEndDate != value)) 

                
{ 
                    this.OnSellEndDateChanging(value); 
                    this.SendPropertyChanging(); 
                    this._SellEndDate = value; 
                    this.SendPropertyChanged("SellEndDate"); 
                    this.OnSellEndDateChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_DiscontinuedDate", DbType="DateTime")] 
        public System.Nullable<System.DateTime> DiscontinuedDate 

        
{ 
            get 

            
{ 
                return this._DiscontinuedDate; 
            } 
            set 

            
{ 
                if ((this._DiscontinuedDate != value)) 

                
{ 
                    this.OnDiscontinuedDateChanging(value); 
                    this.SendPropertyChanging(); 
                    this._DiscontinuedDate = value; 
                    this.SendPropertyChanged("DiscontinuedDate"); 
                    this.OnDiscontinuedDateChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_rowguid", DbType="UniqueIdentifier NOT NULL")] 
        public System.Guid rowguid 

        
{ 
            get 

            
{ 
                return this._rowguid; 
            } 
            set 

            
{ 
                if ((this._rowguid != value)) 

                
{ 
                    this.OnrowguidChanging(value); 
                    this.SendPropertyChanging(); 
                    this._rowguid = value; 
                    this.SendPropertyChanged("rowguid"); 
                    this.OnrowguidChanged(); 
                } 
            } 
        } 
[DataMember] 
        [Column(Storage="_ModifiedDate", DbType="DateTime NOT NULL")] 
        public System.DateTime ModifiedDate 

        
{ 
            get 

            
{ 
                return this._ModifiedDate; 
            } 
            set 

            
{ 
                if ((this._ModifiedDate != value)) 

                
{ 
                    this.OnModifiedDateChanging(value); 
                    this.SendPropertyChanging(); 
                    this._ModifiedDate = value; 
                    this.SendPropertyChanged("ModifiedDate"); 
                    this.OnModifiedDateChanged(); 
                } 
            } 
        } 
         
        public event PropertyChangingEventHandler PropertyChanging; 
         
        public event PropertyChangedEventHandler PropertyChanged; 
         
        protected virtual void SendPropertyChanging() 

        
{ 
            if ((this.PropertyChanging != null)) 

            
{ 
                this.PropertyChanging(this, emptyChangingEventArgs); 
            } 
        } 
         
        protected virtual void SendPropertyChanged(String propertyName) 

        
{ 
            if ((this.PropertyChanged != null)) 

            
{ 
                this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
            } 
        } 
    } 
} 
#pragma warning restore 1591 

第四步:创建一个启动了Ajax支持的WCF服务:PageGridService.svc
 
设计一个用于与ExtJs进行分页交互的PageData泛型类:
using System; 
using System.Data; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 
using System.Runtime.Serialization; 
 
namespace ExtJs_Wcf_Linq_PageGrid 


{ 
[DataContract] 
public class PageData<T> 


{ 
[DataMember] 
public int TotolRecord 


{ 
get; 
set; 
} 
[DataMember] 
public T Data 


{ 
get; 
set; 
} 
} 
} 

这个泛型类用于WCF与ExtJS的Grid控件交互,T是返回的具体数据类型的集合,TotalRecord是总记录数。
修改PageGridService.svc的页面代码,添加Factory="System.ServiceModel.Activation.WebServiceHostFactory",添加后代码如下:
 
在后台代码中设计一个WCF服务操作,用于与ExtJS交互:
public PageData<Product[]> GetProductsByPage(int start,int limit)
具体代码为:
[OperationContract] 
[WebInvoke(Method = "*", ResponseFormat = WebMessageFormat.Json, 
UriTemplate = "GetProductsByPage?start={start}&limit={limit}")] 
public PageData<Product[]> GetProductsByPage(int start,int limit) 


{ 
ProductsDataContext productDbContext = new ProductsDataContext(); 
IQueryable<Product> res = productDbContext.Product.Select(product => product); 
PageData<Product[]> returnData = new PageData<Product[]>(); 
returnData.TotolRecord = res.ToArray<Product>().Length; 
res = res.Skip<Product>(start); 
res = res.Take<Product>(limit); 
returnData.Data = res.ToArray<Product>(); 
return returnData; 
} 

注意在linq中用Skip和Take实现分页
第五步:创建htm页面PageGridDemo.htm,添加如下的代码:
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>ExtJs+WCF+LINQ打造分页Gridtitle> 
<link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" /> 
 
<script type="text/javascript" src="adapter/ext/ext-base.js" charset="gb2312">script> 
 
<script type="text/javascript" src="ext-all.js" charset="gb2312">script> 
 
<link rel="stylesheet" type="text/css" href="shared/examples.css" /> 
 
<script type="text/javascript" src="shared/examples.js" charset="gb2312">script> 
 
<script type="text/javascript" src="pagegrid.js" charset="gb2312">script> 
 
head> 
<body> 
<h1> 
ExtJs+WCF+LINQ打造分页Gridh1> 
<div id="page-grid"> 
div> 
body> 
html>
第六步: 创建javascript脚本文件,用于实现ExtJs grid控件,代码为:

/**//* 
* Ext JS Library 2.1 
* Copyright(c) 2006-2008, Ext JS, LLC. 
* licensing@extjs.com 
* 
* http://extjs.com/license 
*/ 

Ext.onReady(function()
{ 
 
//创建一个用于访问WCF服务的HttpProxy,且访问方法为GET 

var proxy = new Ext.data.HttpProxy(
{ 
url:'PageGridService.svc/GetProductsByPage', 
method:'GET' 
}); 
 
var reader = new Ext.data.JsonReader( 


{root:'Data',totalProperty :'TotolRecord'}, 
[ 


{name: 'ProductID'}, 


{name: 'Name'}, 


{name: 'ProductNumber'}, 


{name: 'MakeFlag'}, 


{name: 'FinishedGoodsFlag'}, 


{name: 'Color'}, 


{name: 'SafetyStockLevel'}, 


{name: 'ReorderPoint'}, 


{name: 'StandardCost'}, 


{name: 'ListPrice'}, 


{name: 'Size'}, 


{name: 'SizeUnitMeasureCode'}, 


{name: 'Weight'}, 


{name: 'DaysToManufacture'}, 


{name: 'ProductLine'}, 


{name: 'Class'}, 


{name: 'Style'}, 


{name: 'Weight'}, 


{name: 'ProductSubcategoryID'}, 


{name: 'ProductModelID'}, 


{name: 'SellStartDate'}, 


{name: 'SellEndDate'}, 


{name: 'DiscontinuedDate'}, 


{name: 'rowguid'}, 


{name: 'ModifiedDate'} 
] 
); 
 
var store = new Ext.data.Store( 


{proxy:proxy,reader:reader} 
); 
 
// create the Grid 

var grid = new Ext.grid.GridPanel(
{ 
store: store, 
columns: [ 


{id:'ProductID',header: "编号",width:30, sortable: true, dataIndex: 'ProductID'}, 


{header: "名称", width:75, sortable: true, dataIndex: 'Name'}, 


{header: "产品编码", width:75, sortable: true, dataIndex: 'ProductNumber'}, 


{header: "是否标记", width:75, sortable: true, dataIndex: 'MakeFlag'}, 


{header: "颜色", width:50, sortable: true,dataIndex:'Color'}, 


{header: "数量", width:50, sortable: true,dataIndex:'ReorderPoint'}, 


{header: "单价", width:50, sortable: true,renderer:'userMoney',dataIndex: 'StandardCost'} 
], 
stripeRows: true, 
autoExpandColumn: 'ProductID', 
height:400, 
width:600, 
title:'产品信息', 
viewConfig: 


{ 
columnsText:'列', 
sortAscText:'升序', 
sortDescText:'降序' 
}, 

bbar: new Ext.PagingToolbar(
{ 
pageSize: 25, 
store: store, 
displayInfo: true, 
displayMsg: '总记录数 {0} - {1} of {2}', 
emptyMsg: "没有记录" 
}) 
}); 
 
grid.render('page-grid'); 
 
//载入 

store.load(
{params:
{start:0,limit:25}}); 
 
grid.getSelectionModel().selectFirstRow(); 
}); 

好,到此,一个ExtJs+Wcf+LINQ分页Grid实现完毕,下面浏览PageGridDemo.htm,查看运行效果: