由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下
1.首先是EF的简历,想必大家都清楚:添加-〉新建项-〉数据-〉Ado。net实体数据模型
2.就是后台数据也就是apiController,前台需要两个数据,一个是数据的总条数,第二个是要查询的分页数据
所以我们要建立一个实体,用于返回数据传送,由于多个页面都使用,多以用到了泛型。代码如下:
public class PageData<T> { //数据总数 public int TotolRecord { get; set; } //需要返回的数据 public T Data { get; set; } }
3.组织需要向前台返回的数据
/// <summary> /// 获取所有的监控信息 /// </summary> /// <returns></returns> public PageData<Monitor[]> Get([FromUri]string _dc, [FromUri] int page, [FromUri] int start, [FromUri] int limit) { OlandHIPDBInterfaceTrackEntities db = new OlandHIPDBInterfaceTrackEntities(); //返回数据包含数据总数 PageData<Monitor[]> returnData = new PageData<Monitor[]>(); IQueryable<Monitor> data = from item in db.Monitor orderby item.ID select item; returnData.TotolRecord = data.ToArray().Length; data=data.Skip<Monitor>(start); data=data.Take<Monitor>(limit); returnData.Data =data .ToArray<Monitor>(); 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下如何传值
时间: 2024-10-12 07:59:25