1. 程式人生 > >extjs 之Ext.data.Store[Grid]操作 【增刪修改】

extjs 之Ext.data.Store[Grid]操作 【增刪修改】

Ext.data.Store是extjs的資料結構。 主要用於extjs的grid和combobox等控制元件的資料載入和操作。實際上對grid的增刪改可以通過對store的操作來控制.

1、增加提交:

     buttons: [{
            text: '儲存',
            handler:function(){
              if (Docnum_Add_Form.getForm().isValid()) {   //判斷提交的資料是否符合正則表示式
                Docnum_Add_Form.getForm().submit({
                    waitTitle: '提示', //標題
                    waitMsg: '正在儲存資料請稍後...', //提示資訊                    
                    url: '../../ashx/car/Tra_Docnum_add.ashx',
                    method: "POST",
                    success: function (form, action) {
                        //成功後
                        mystore.load();
                        Docnum_Add_Win.hide();                            
                        return;
                        /* 方法一
                        mystore.insert(0,[{}]);   //插入空記錄
                        var _rec=mystore.getAt(0);
                        _rec.set('Docnum', form.findField('Docnum').value);
                        _rec.commit();
                        */
                        /*  方法二
                        var _rec = Ext.create('MyData',{Dconum:form.findField('Docnum').value});
                        _rec.insert(0,_rec);
                        */
                    },
                    failure: function (form, action) {
                        var errorObj = Ext.JSON.decode(action.response.responseText);
                        Ext.Msg.show({
                                  title: '錯誤提示',
                                  msg: errorObj.msg,
                                  buttons: Ext.Msg.OK,
                                  icon: Ext.Msg.ERROR
                         });
                    }
                })
              }
              else {
                alert('出錯!輸入資料格式出錯 !');
              }            
          }
        }, {
            text: '取消',
            handler: function () { Docnum_Add_Win.hide(); }            
     }]

2、刪除部分


    var btnDeleteAction = Ext.create('Ext.Action', {
        id:'BtnDelete',
        iconCls: 'deleteicon',
        text: '作廢',
        disabled: false,
        minWidth: 60,
        handler: function (widget, event) {
               var rec = mygrid.getSelectionModel().getSelection()[0];
               var _docnum = rec.get('Docnum');
               Ext.Msg.show({
                   title: "提示", msg: "確認要作廢單號<"+_docnum+">,是嗎?", width: 300, icon: Ext.MessageBox.QUESTION
                 , buttons: Ext.MessageBox.YESNO,
                fn: function(btn) {
                    if (btn === "yes") {
                          //首先刪除後臺資訊
                        Ext.Ajax.request({
                                url:"/ashx/car/Tra_Docnum_del.ashx",
                             method:"POST",
                                params:{Docnum:rec.get('Docnum')},
                                success:function(response, opts){  
                                    var _index = mystore.indexOf(rec);


                                    mystore.removeAt(_index);

                                   //   mystore.removeAt(rec.index);      此為原方式,不能用的。
                               },
                               failure:function(response, opts){
                                   var _text = response.responseText;
                                   Ext.Msg.alert("提 示",_text);
                             }
                        });
                     }
                   }
            })
        }
    });
     注意點:由於前臺刪除,沒有重新整理,當刪除下一條資料時,還是用mystore.removeAt(rec.index) 方式,就會錯誤刪除了其他記錄,因為mystore沒有重新編索引,所以你取到的還是上次載入時的索引,所以要用查詢記錄,得到當前實際索引再刪除才可,這問題開始沒注意,EXT也有考慮不全的地方,算不算Bug不知道。


3、更改部分

     buttons: [{
            text: '儲存',
            handler:function(){
              if (Docnum_Upd_Form.getForm().isValid()) {   //判斷提交的資料是否符合正則表示式
                Docnum_Upd_Form.getForm().submit({
                    waitTitle: '提示', //標題
                    waitMsg: '正在儲存資料請稍後...', //提示資訊                    
                    url: '../../ashx/car/Tra_Docnum_Upd.ashx',
                    method: "POST",
                    success: function (form, action) {
                        //成功後
                        //mystore.load();
                        //return;
                        var flag = action.result.success;
                        if (flag ) {
                            var rec = mystore.getAt(_rec.index);
                            rec.set('Docnum', form.findField('Docnum').value);
                            //rec.set('UseDate', form.findField('UseDate').value);   //這種取法為物件,由於不是日期型別所以不能用
                            rec.set('UseDate', form.findField('UseDate').rawValue);  //直接取文字框中的資料,日期型式時直接取文字
                            rec.set('DeptName', form.findField('DeptName').value);
                            rec.set('CarType', form.findField('CarType').value);
                            rec.set('ToWhere', form.findField('ToWhere').value);
                            rec.set('CreateUser', form.findField('CreateUser').value);
                            rec.set('CreateDate', form.findField('CreateDate').value);
                            rec.set('Checked', form.findField('Checked').value);
                            //rec.set('CheckUser', form.findField('CheckUser').value);
                            //rec.set('CheckDate', form.findField('CheckDate').value);
                            rec.set('PlanMan', form.findField('PlanMan').value);
                            rec.set('PlanTon', form.findField('PlanTon').value);
                            rec.set('UseRemark', form.findField('UseRemark').value);
                            rec.set('MantelNo', form.findField('MantelNo').value);
                            rec.commit();   //去除單元格的
                            Docnum_Upd_Win.hide();                          
                        }
                    },
                    failure: function (form, action) {
                        var errorObj = Ext.JSON.decode(action.response.responseText);
                        Ext.Msg.show({
                                  title: '錯誤提示',
                                  msg: errorObj.msg,
                                  buttons: Ext.Msg.OK,
                                  icon: Ext.Msg.ERROR
                         });
                    }
                })
              }
              else {
                alert('出錯!輸入資料格式出錯 !');
              }            
          }
        }, {
            text: '取消',
            handler: function () { Docnum_Upd_Win.hide(); }            
     }]