// 這個繼承比較簡單,看注釋就會清楚了,文件名定義為CustomGridPanel.js
Ext.grid.CustomGridPanel = function(c){
 Ext.grid.CustomGridPanel.superclass.constructor.call(this, c);
};

Ext.extend(Ext.grid.CustomGridPanel, Ext.grid.GridPanel, {
 // 選擇下一行記錄,如果沒有下一行記錄則選擇上一行記錄,會刷新表格
   selectNext: function(){
     var grid_ = this;
     var selModel = grid_.getSelectionModel();
     var nextSel = null;
     if(selModel.hasNext()){
      selModel.selectNext();
     }else if(selModel.hasPrevious()){
      selModel.selectPrevious();
     }else{
      return null;
     }
     nextSel = selModel.getSelected();
     grid_.getView().refresh();
     return nextSel;
//    if(nextSel){selModel.selectRecords([nextSel]);}
   },
  // 根據已經選擇的排序信息,插入一條記錄,并選擇插入的記錄
   addSorted: function(record,dwr,dwrOpts){
     var grid_ = this;
     var result = grid_.invokeDwr(record,dwr,dwrOpts);
     if(result){
     grid_.getStore().addSorted(record);
     grid_.getView().refresh();
     grid_.getSelectionModel().selectRecords([record]);
    }
    return result;
   },
   // 在最后面插入一條記錄,并選擇插入的記錄
   insertLast: function(record,dwr,dwrOpts){
     var grid = this;
    var index = grid.getStore().getCount();
    return grid.insert(index,record,dwr,dwrOpts);
   },
   // 在給定索引上插入一條記錄,并選擇插入的記錄
   insert: function(index,record,dwr,dwrOpts){
     var grid_ = this;
     var result = grid_.invokeDwr(record,dwr,dwrOpts);
     if(result){
     grid_.getStore().insert(index, record);
     grid_.getView().refresh();
     grid_.getSelectionModel().selectRecords([record]);
  }
  return result;
   },
  
   invokeDwr: function(record, dwr, dwrOpts){
     var flag = true;
    if(dwr){
        var dwrObj = {async: false};
        if(dwrOpts){
         dwrObj = Ext.apply(dwrObj, dwrOpts);
        }
        dwrObj.errorHandler = function(text,e){
          flag = false;
          Ext.CustomUtil.error(text);
        };
//     dwr.apply(this, [record.data, dwrObj]);
   dwr(record.data, dwrObj);
     return flag;
    } else {
     return false;
    }
   },
   // 刪除一條記錄,選擇下一條可以刪除的記錄
   removeRecord: function(record, dwr, dwrOpts){
    var grid = this;
    var err = false;
    err = ! grid.invokeDwr(record, dwr, dwrOpts);
    if(err){return;}
    var next = grid.selectNext();
    grid.getStore().remove(record);
    if(next){grid.getSelectionModel().selectRecords([next]);}
   },
   // 獲取選擇的單一記錄
   getSelected: function(){
    return this.getSelectionModel().getSelected();
   }
});