Extjs4.2+webAPI+EF實現分頁以及webapi的數據傳值

小編:管理員 261閱讀 2022.09.07

由于不明白分頁的總數是怎么計算,不知道他的分頁方式所以花費了好多功夫,現在弄出來了與大家分享下

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下如何傳值

關聯標簽:
亚洲国产欧美图片,亚洲aⅴ在线av,日韩亚洲综合图片视频,日本av精品在线中文