1. <table id="w9hw2"></table>
      <big id="w9hw2"></big>

      Extjs4.2+webAPI+EF实现分页以及webapi的数据传值

      小编:管理员 296阅读 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下如何传值

      关联标签:
      免费一级片或者是视频
      1. <table id="w9hw2"></table>
        <big id="w9hw2"></big>