萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> jsp編程 >> Extjs動態生成表格

Extjs動態生成表格

  在web顯示數據時,會遇到grid的列數和行數不確定的這種情況。如何來根據數據動態的創建表格呢?

  Extjs 的json data給我們帶來了一個很好的比較簡單的方法。

  要創建一個grid需要確定它的列數,再根據數據的數量就可以確定行數了。

  看到有人用過一種方法就是講列的屬性和數據一起放在json data裡去,這樣可以達到效果,但是不難發現,這樣的話,就很難進行分頁或者更新表格裡的數據。

  其實我們可以結合extjs官網上的那種固定列數的訪問方法來動態生成表格。

  首先通過Ajax從服務端反回列的信息,封裝成json ,表格數據通過另一個ajax請求來獲得,因為列已經獲得,所以可以將此封裝成一個store.這樣大功告成,生成grid所需要的,store,和cm

  demo 源碼如下:(由於考慮到代碼簡介明了,我將數據寫死在了js 中):

  Ext.onReady(function(){

  // NOTE: This is an example showing simple state management. During development,

  // it is generally best to disable state management as dynamically-generated ids

  // can change across page loads, leading to unpredictable results. The developer

  // should ensure that stable state ids are set for stateful components in real apps.

  Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

  var myData =[[1,1,1,1],

  [2,2,2,2]

  ];

  // example of custom renderer function

  function change(val){

  if(val > 0){

  return '' + val + '';

  }else if(val < 0){

  return '' + val + '';

  }

  return val;

  }

  // example of custom renderer function

  function pctChange(val){

  if(val > 0){

  return '' + val + '%';

  }else if(val < 0){

  return '' + val + '%';

  }

  return val;

  }

  // create the data store

  var fieldDatas = "{'columModle':["+

  "{'header': 'seq','dataIndex': 'number','width':40},"+

  "{'header': 'code','dataIndex': 'text1'},"+

  "{'header': 'name','dataIndex': 'info1'},"+

  "{'header': 'price','dataIndex': 'special1'}"+

  "],'fieldsNames':[{name: 'number'},"+

  "{name: 'text1'}, {name: 'info1'},"+

  "{name: 'special1'}]}";

  var json = new Ext.util.JSON.decode(fieldDatas);

  var cm = new Ext.grid.ColumnModel(json.columModle);

  var store = new Ext.data.SimpleStore({

  fields: json.fieldsNames

  });

  store.loadData(myData);

  // var ds = new Ext.data.JsonStore({

  // data:store.toSource(),

  // fields:json.fieldsNames

  // });

  // create the Grid

  var grid = new Ext.grid.GridPanel({

  height:200,

  width:400,

  region: 'center',

  split: true,

  border:false,

  store:store,

  cm:cm

  });

  grid.render('grid-example');

  });

copyright © 萬盛學電腦網 all rights reserved