zoukankan      html  css  js  c++  java
  • Extjs4.2+webAPI+EF实现分页以及webapi的数据传值

    由于不明白分页的总数是怎么计算,不知道他的分页方式所以花费了好多功夫,现在弄出来了与大家分享下

    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', {
             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, //是否可关闭
                     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', {  35, text: '序号' }),
             {
                 text: '编号',
                  50,
                 sortable: true,
                 dataIndex: 'ID'
             }, {
                 text: '调用者',
                  80,
    
                 dataIndex: 'Invoker'
    
             }, {
                 header: '机器名',
                  80,
                 sortable: true,
                 dataIndex: 'MachineName'
    
             }, {
                 text: '机器IP',
                  100,
                 // xtype: 'checkcolumn',
                 dataIndex: 'MachineIP'
    
             }, {
                 text: '调用时间',
                  140,
                 sortable: true,
                 dataIndex: 'InvokeDate',
                 renderer: dateFormat
    
             }, {
                 text: '调用接口',
                  120,
                 sortable: true,
                 dataIndex: 'Interface'
    
             }, {
                 text: '接口描述',
                  140,
                 sortable: true,
                 dataIndex: 'InterfaceDes'
    
             }, {
                 text: '是否成功',
                  80,
                 sortable: true,
                 dataIndex: 'IsSuccessed'
    
             }, {
                 text: '耗时',
                  80,
                 sortable: true,
                 dataIndex: 'ConsumeTime'
    
             }, {
                 text: '错误信息',
                  160,
                 sortable: true,
                 dataIndex: 'ErrorMessage'
    
             }, {
                 text: '备注',
                  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下如何传值
  • 相关阅读:
    <转>Npoi导入导出Excel操作<载>
    将DataTable导出为Excel C#
    错误 X “X1”不包含“XX2”的定义,并且找不到可接受类型为“X1”的第一个参数的扩展方法“XX2”(是否缺少 using 指令或程序集引用?)
    错误 1 未知的服务器标记“asp:ScriptManager”。
    分析器错误消息: 类型“test.test.testx”不明确: 它可能来自程序集“F: estProjectin est.test.DLL”或程序集“F: estProjectin estProject.DLL”。请在类型名称中显式指定程序集。
    There are no interfaces on which a capture can be done.
    基础知识系列☞GET和POST→及相关知识
    基础知识系列☞Abstract和Virtual→及相关知识
    同源策略
    26Mybatis_一级缓存及其测试
  • 原文地址:https://www.cnblogs.com/smiler/p/3147564.html
Copyright © 2011-2022 走看看