Extjs4.2+webAPI+EF實現分頁以及webapi的數據傳值
小編:管理員 447閱讀 2022.09.07
由于不明白分頁的總數是怎么計算,不知道他的分頁方式所以花費了好多功夫,現在弄出來了與大家分享下
1.首先是EF的簡歷,想必大家都清楚:添加-〉新建項-〉數據-〉Ado。net實體數據模型
2.就是后臺數據也就是apiController,前臺需要兩個數據,一個是數據的總條數,第二個是要查詢的分頁數據
所以我們要建立一個實體,用于返回數據傳送,由于多個頁面都使用,多以用到了泛型。代碼如下:
public class PageData復制{ //數據總數 public int TotolRecord { get; set; } //需要返回的數據 public T Data { get; set; } }
3.組織需要向前臺返回的數據
///復制/// 獲取所有的監控信息 /// ///public PageData Get([FromUri]string _dc, [FromUri] int page, [FromUri] int start, [FromUri] int limit) { OlandHIPDBInterfaceTrackEntities db = new OlandHIPDBInterfaceTrackEntities(); //返回數據包含數據總數 PageData returnData = new PageData (); IQueryable data = from item in db.Monitor orderby item.ID select item; returnData.TotolRecord = data.ToArray().Length; data=data.Skip (start); data=data.Take (limit); returnData.Data =data .ToArray (); return returnData; }
好了,后臺數據準備完畢,那么就開始Extjs部分的了
4.Extjs部分我就直接上代碼了
Ext.require([ '*', 'Ext.toolbar.Paging', 'Scripts.*' ]) Ext.onReady(function () { Ext.define('InterfaceTrackModel', { extend: 'Ext.data.Model', fields: [{ name: 'ID', type: 'int', useNull: true }, 'Invoker', 'MachineName', 'MachineIP', 'InvokeDate', 'Interface', 'InterfaceDes', 'IsSuccessed', 'ConsumeTime', 'ErrorMessage', 'Remark' ] }); var InterfaceTrackStore = Ext.create('Ext.data.Store', { autoLoad: true, autoSync: true, model: 'InterfaceTrackModel', //設置分頁大小 pageSize: 20, proxy: { type: 'rest', url: 'api/InterfaceTrack', reader: { type: 'json', root: 'Data', //獲取數據總數 totalProperty: 'TotolRecord' }, writer: { type: 'json' } } }); var selModel = Ext.create('Ext.selection.CheckboxModel', { width: 55 }); //將時間轉化為 2011-08-20 00:00:00 格式 //解決Ext4的formPanel通過grid的store查詢問題 2012.2.22 jzr function dateFormat(value) { if (null != value) { //return Ext.Date.format(new Date(value), 'Y-m-d H:i:s'); return Ext.Date.format(new Date(value), 'Y-m-d H:i:s'); } else { return null; } } Ext.define('Scripts.InterfaceTrackGrid', { extend: 'Ext.grid.GridPanel', title: '接口監控', id: 'InterfaceTrackGrid', initComponent: function () { Ext.apply(this, { closable: true, //是否可關閉 width: 400, height: 300, frame: true, store: InterfaceTrackStore, iconCls: 'icon-user', // selModel: selModel, viewConfig: { getRowClass: function (record) { return record.get('IsSuccessed') ? '' : 'error-row'; } }, columns: [Ext.create('Ext.grid.RowNumberer', { width: 35, text: '序號' }), { text: '編號', width: 50, sortable: true, dataIndex: 'ID' }, { text: '調用者', width: 80, dataIndex: 'Invoker' }, { header: '機器名', width: 80, sortable: true, dataIndex: 'MachineName' }, { text: '機器IP', width: 100, // xtype: 'checkcolumn', dataIndex: 'MachineIP' }, { text: '調用時間', width: 140, sortable: true, dataIndex: 'InvokeDate', renderer: dateFormat }, { text: '調用接口', width: 120, sortable: true, dataIndex: 'Interface' }, { text: '接口描述', width: 140, sortable: true, dataIndex: 'InterfaceDes' }, { text: '是否成功', width: 80, sortable: true, dataIndex: 'IsSuccessed' }, { text: '耗時', width: 80, sortable: true, dataIndex: 'ConsumeTime' }, { text: '錯誤信息', width: 160, sortable: true, dataIndex: 'ErrorMessage' }, { text: '備注', width: 80, sortable: true, dataIndex: 'Remark' }], bbar: Ext.create('Ext.PagingToolbar', { store: InterfaceTrackStore, displayInfo: true, displayMsg: '顯示{0}-{1}條,共計{2}條', emptyMsg: "沒有數據" }) }), this.callParent(arguments); } }); //加載數據 // InterfaceTrackStore.load({ // params: { // start: 0, // limit: 20 // } // }); })復制
這里注意的地方,前臺接受數據的時候
reader: { type: 'json', root: 'Data', //獲取數據總數 totalProperty: 'TotolRecord' },復制
檢測后臺傳過來的數據,分頁數據對應的是Data鍵值對,數據總數據條數為
TotolRecord鍵值對 最終效果圖:

這里面還設計了webaip的傳值接受問題,可以參考 webapi下如何傳值
相關推薦
- ExtJs七(ExtJs Mvc創建ViewPort) 前言在4.1的時候,要先創建一個擴展于Ext.app.Application的類,然后用create創建它的實例來開始應用程序的。而在4.1.1,則可直接調用application方法開始執行應用程序,簡化了。調用application方法,其參數是一個配置對象,主要配置項有以下三個:name:用來…
- Hibernate Criterion 在查詢方法設計上能夠靈活的依據Criteria的特點來方便地進行查詢條件的組裝.Hibernate設計了CriteriaSpecification作為Criteria的父接口,以下提供了Criteria和DetachedCriteria.Criteria和DetachedCriteria的主要差別在于創建的形式不一樣,Criteria是在線的,所…