2010年10月29日 星期五

ExtJS-Grid動態表單欄位

曾經實作EXTJS Grid表單的時候碰到一個需求:
想透過一個頁面來實作資料庫內資料修改與新增功能,
此時碰到一個問題,資料表欄位並不是都一樣,
但是基本功能需求都一樣,實在沒理由分多個頁面寫。

後來不斷找資料的情況下,才終於有了解決方法。
原來,ExtJS的Grid亦可做到動態欄位的表單,
底下為主要的程式片段:
  1.  var conn = new Ext.data.Connection();
  2.  
  3.  conn.request({
  4.  
  5.   url : url,
  6.  
  7.   callback : function(options, success, response) {
  8.  
  9.    var json = new Ext.util.JSON.decode(response.responseText);
  10.  
  11.    var cm = new Ext.grid.ColumnModel(json.columModle);
  12.  
  13.    var ds = new Ext.data.JsonStore({
  14.  
  15.   data : json.data,
  16.  
  17.   fields : json.fieldsNames,
  18.  
  19.   pruneModifiedRecords : true
  20.  
  21.    });
  22.  
  23.    其他程式片段
  24.  
  25.  }
  26.  
  27. })
  28.  

透過以上短短幾行程式,即可完整實作出我所要的功能需求,
不過上述僅能顯示,如果要能讓Grid編輯的話還需要在其他程式碼片段加入:
  1. var row = cm.getColumnCount();   
  2.  
  3. for (var i = 1; i < row - 1; i++) {
  4.  
  5. cm.setEditable(i, true);
  6.  
  7. cm.setEditor(i, "輸入的資料類型");
  8.  
  9. }
這樣即可實作出一個統一的插入新增頁面
而如果要重新整理、新增、刪除後更新頁面資料
僅需要再每個處理event中加入底下程式碼:
  1. Ext.Ajax.request({
  2.  
  3. url : "url",
  4.  
  5. success : function(response) {
  6.  
  7. json = new Ext.util.JSON.decode(response.responseText);
  8.  
  9. cm = new Ext.grid.ColumnModel(json.columModle);
  10.  
  11. ds = new Ext.data.JsonStore({
  12.  
  13. data : json.data,
  14.  
  15. fields : json.fieldsNames
  16.  
  17.  
  18. var row = cm.getColumnCount();
  19.  
  20. for (var i = 1; i < row - 1; i++) {
  21.  
  22. cm.setEditable(i, true);
  23.  
  24. cm.setEditor(i,new Ext.form.NumberField);
  25.  
  26. }
  27.  
  28. grid.reconfigure(ds, cm); //記得要reconfigure
  29.  
  30. }
  31.  
  32. });
  33.  
透過上面的程式碼,一個支援多個資料表具有新增、刪除、儲存與重新整理的頁面就大功告成了。

沒有留言:

張貼留言

Android Audio 心得筆記(一):Audio Stream類型與預設音量

因為一些工作關係所以接觸到Android上層Audio Framework與Volume相關的部分, 記錄一下這一段時間追Code的心得,這邊會以Google N的Code為參考. Android Audio總共定義10種STREAM類型(不含DEFAULT), 用途都蠻...