顯示具有 Checkbox 標籤的文章。 顯示所有文章
顯示具有 Checkbox 標籤的文章。 顯示所有文章

2023年11月8日 星期三

V80203 – checkbox –勾選[V]已完工,則 [ ]未完工 不勾選 - onChangeEvent - V80202 -[V]TP工單,則[ ]非 TP工單不勾選

目的 : V80203 – checkbox –勾選[V]已完工, [ ]未完工  -–勾選[V]未完工, [ ]已完工 

           V80202 -[V]TP工單,則[ ]非 TP工單不勾選

處理說明: 1>get_cmp_xxx - s_chk_AMMSTS Object - 為一般Objext - 沒有 Ext onchange屬性
                      var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
                      --> Object  cmp_chk_AMMSTS1  - 為一般Object,並沒有 onchange event 的屬性
    
              2>get_cmp_XXX --> 加入 Query(Ext.FormPanel) 後, 才有 Ext 的各種屬性(onchange/.. )
                  var Query = new Ext.FormPanel({
                  id: 's_form',
                  items: [
                 {
                xtype: 'panel', id: 'panel1', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0,
                items: [                  
                   {
                        xtype: 'panel', id: 'panel15', layout: { type: 'vbox', align: 'stretch' }, flex: 15, border: 0,
                        items: [cmp_chk_AMMSTS, cmp_ISROOT, cmp_ISBOMIN, cmp_ISWAITNSN],
                    },   // end of panel15 , flex:16                        

           3> [V]已完工 [ ]未完工的 true/false 控制
    Ext.getCmp("s_chk_AMMSTS").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"
    Ext.getCmp("s_chk_AMMSTS").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[0].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"



1>*.js
    //單況: 已完工/未完工
    var cmp_chk_AMMSTS = get_cmp_chkgrp1('單況', 's_chk_AMMSTS', 50);    
    var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
    var cmp_chk_AMMSTS2 = get_cmp_chk0('未完工', 's_chk_AMMSTS', 50, '2');
    cmp_chk_AMMSTS.items.push(cmp_chk_AMMSTS1, cmp_chk_AMMSTS2);
    cmp_chk_AMMSTS1.checked = true;    

  var Query = new Ext.FormPanel({
        id: 's_form',
        layout: { type: 'hbox', align: 'stretch' },
        fieldDefaults: { labelAlign: 'right' },
        defaults: { margin: { top: 3 } },
        items: [
            {
                xtype: 'panel', id: 'panel1', layout: { type: 'hbox', align: 'stretch' }, flex: 14, border: 0,
                items: [
                    {
                        xtype: 'panel', id: 'panel11', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_EOECN, cmp_ACNO,cmp_AMMNO, cmp_AMMSTS, cmp_PN1, cmp_EM_SN,],
                    },  // end of panel11
                    {
                        xtype: 'panel', id: 'panel12', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_RMK, cmp_PROJID, cmp_SAPNO, cmp_SAPMAN, cmp_STARTVAL, cmp_CHARG,],
                    },   // end of panel12 , flex:16                    
                    {
                        xtype: 'panel', id: 'panel13', layout: { type: 'vbox', align: 'stretch' }, flex: 25, border: 0,
                        items: [cmp_PN, cmp_PROCWC, cmp_MKDT,  cmp_SROTP, cmp_FACWC,],
                    },   // end of panel13 , flex:16              
                    {
                        xtype: 'panel', id: 'panel14', layout: { type: 'vbox', align: 'stretch' }, flex: 30, border: 0,
                        items: [cmp_WBSNO, cmp_ACAREA, cmp_LWA, cmp_MK,cmp_SAPDT1,],
                    },   // end of panel14 , flex:16                               
                    {
                        xtype: 'panel', id: 'panel15', layout: { type: 'vbox', align: 'stretch' }, flex: 15, border: 0,
                        items: [cmp_chk_AMMSTS, cmp_ISROOT, cmp_ISBOMIN, cmp_ISWAITNSN],
                    },   // end of panel15 , flex:16                            

    console.log("cmp_chk_AMMSTS2:", cmp_chk_AMMSTS2);
    console.log("Ext.getCmp('s_chk_AMMSTS').items.items[1]", Ext.getCmp('s_chk_AMMSTS').items.items[1]);
    Ext.getCmp("s_chk_AMMSTS").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"
    Ext.getCmp("s_chk_AMMSTS").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_AMMSTS").items.items[0].setValue(false);
        }
    }
    );  // end of  cmp_chk_AMMSTS.items[0].on("change"




1>*.js
   //若按[TP工單],則 [非TP工單].checked=false;
    Ext.getCmp("s_chk_TP").items.items[0].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_TP").items.items[1].setValue(false);
        }
    }
    );  // end of  cmp_chk_TP.items[0].on("change"
    Ext.getCmp("s_chk_TP").items.items[1].on('change', function (me, newValue, oldValue, eOpts) {
        if (newValue) {
            Ext.getCmp("s_chk_TP").items.items[0].setValue(false);
        }
    }

2023年11月3日 星期五

V80203 – checkbox – 過濾條件加文字輸入欄位 - checkboxgroup

目的: V80203 – checkbox – 加文字輸入欄位  - checkboxgroup

處理說明: 1>checkboxGroup - 內含 checkbox
                       //已完工/未完工
                      var cmp_chk_AMMSTS = get_cmp_chkgrp1('單況', 's_chk_AMMSTS', 50);    
                      var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
                      var cmp_chk_AMMSTS2 = get_cmp_chk0('未完工', 's_chk_AMMSTS', 50, '2');
                      cmp_chk_AMMSTS.items.push(cmp_chk_AMMSTS1, cmp_chk_AMMSTS2);
                 2>單一checkbox 
                     var cmp_ISROOT = get_cmp_chk1('機務工單', 's_ISROOT', 80, 'Y', '0 0 0 50');                                   3>checkbox 後接文字欄位  : 利用 panel 當 fieldcontainer
                        //預估到件率>xx
                       var cmp_RT = get_cmp_panel1(0);
                       var cmp_RT1 = get_cmp_chk1('預估到件率>', 's_RT', 80, 'Y','0 5 0 0');
                       var cmp_RT2 = get_cmp_txt0('s_RT1', 30);
                        cmp_RT.items.push(cmp_RT1,cmp_RT2);

                4>checkboxgroup 必需先 getValue ,再傳入 np 



1>*.js
//單況: 已完工/未完工
var cmp_chk_AMMSTS = get_cmp_chkgrp1('單況', 's_chk_AMMSTS', 50);
var cmp_chk_AMMSTS1 = get_cmp_chk0('已完工', 's_chk_AMMSTS', 50, '1');
var cmp_chk_AMMSTS2 = get_cmp_chk0('未完工', 's_chk_AMMSTS', 50, '2');
cmp_chk_AMMSTS.items.push(cmp_chk_AMMSTS1, cmp_chk_AMMSTS2);

//機務工單
var cmp_ISROOT = get_cmp_chk1('機務工單', 's_ISROOT', 80, 'Y', '0 0 0 50');

//超過xx天
    var cmp_STARTDT = get_cmp_panel1(0);
    var cmp_STARTDT1 = get_cmp_chk1('超過', 's_START', 80, 'Y', '0 5 0 0');
    var cmp_STARTDT2 = get_cmp_txt0('s_STARTDT1', 30);
    var cmp_STARTDT3 = get_cmp_lbl0('天', 30);
    cmp_STARTDT.items.push(cmp_STARTDT1, cmp_STARTDT2, cmp_STARTDT3,);

    var cmp_RT = get_cmp_panel1(0);
    var cmp_RT1 = get_cmp_chk1('預估到件率>', 's_RT', 80, 'Y','0 5 0 0');
    var cmp_RT2 = get_cmp_txt0('s_RT1', 30);
    cmp_RT.items.push(cmp_RT1,cmp_RT2);

      //顯示資料
       var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞             
       //已完工,未完工 //若同時勾選[v]已發工[v]已完工 , 則欄位值 Array of  :  ['1','2']
       np["s_chk_AMMSTS"] = Ext.getCmp('s_chk_AMMSTS').getValue();                            
        var gridstore = Ext.getCmp('grid_M').store;      
        gridstore.getProxy().url = '../api/V80203API/getGridData_M';
        gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK
        Ext.getCmp('grid_M').reloadGridData();


2>*.cs
              //已完工/未完工 AMMSTS
            if (!myfunc.checkisnull(Tmp_chk_AMMSTS))
            {
                if (Tmp_chk_AMMSTS=="1")  //已完工
                    Tmp_Sql = Tmp_Sql + " AND   AMMSTS  IN ('F','G','H','I')  ";
                if (Tmp_chk_AMMSTS == "2")  //未完工
                    Tmp_Sql = Tmp_Sql + " AND   AMMSTS  < 'F'  ";
            };
            //機務工單 - ISROOT
            if (!myfunc.checkisnull(Tmp_ISROOT))
            {
                if (Tmp_ISROOT== "true" )
                   Tmp_Sql = Tmp_Sql + " AND   ISROOT=" + myfunc.AA("Y");                
            };

             //預估到件率> xx
            if (!myfunc.checkisnull(Tmp_ISRT))
            {
                if (Tmp_ISRT == "true")
                    Tmp_Sql = Tmp_Sql + " AND   RT>= "+myfunc.AA(Tmp_RT1);
            };


2023年11月2日 星期四

V80203 – 過濾條件– checkbox 後接著 text輸入欄位

 目的: V80203 – 工單需求物料查詢 – checkbox 後接著 text輸入欄位

處理說明:  1>利用 panel 當 container , 包含 checkbox + text 欄位


1>*.js
//預估到件率>xx
    var cmp_RT = get_cmp_panel1(0);
    var cmp_RT1 = get_cmp_chk1('預估到件率>', 's_RT', 80, 'Y','0 5 0 0');
    var cmp_RT2 = get_cmp_txt0('s_RT1', 30);
    cmp_RT.items.push(cmp_RT1,cmp_RT2);
    
//超過xx天
    var cmp_STARTDT = get_cmp_panel1(0);
    var cmp_STARTDT1 = get_cmp_chk1('超過', 's_START', 80, 'Y', '0 5 0 0');
    var cmp_STARTDT2 = get_cmp_txt0('s_STARTDT1', 30);
    var cmp_STARTDT3 = get_cmp_lbl0('天', 30);
    cmp_STARTDT.items.push(cmp_STARTDT1, cmp_STARTDT2, cmp_STARTDT3,);




2023年8月14日 星期一

V120401 - radio 文字折行, checkbox

 目的: V120401 - radio 文字折行, checkbox

處理說明: 1>將 radio.width ='100%' 即可



1>*.js
// panel13            
    var cmp_STAT = get_cmp_rdgrp1('現況', 's_STAT', 80);    
    var cmp_STAT1 = get_cmp_rd0('全部(不含刪除)', 's_STAT', 50, 'ALL');
    cmp_STAT1.checked = true;
    var cmp_STAT2 = get_cmp_rd0('可借閱', 's_STAT', 50, 'A');
    var cmp_STAT3 = get_cmp_rd0('已借出', 's_STAT', 50, 'B');
    var cmp_STAT4 = get_cmp_rd0('已刪除', 's_STAT', 50, 'Z');
    cmp_STAT.items.push(cmp_STAT1, cmp_STAT2, cmp_STAT3, cmp_STAT4);
    
2>myfunc.js
//get_cmp_rd0 取得 check 元件 , 加入 rdgrp ,  name: par_name
function get_cmp_rd0(par_caption, par_name, par_l_width, par_value, par_margin) {
    if (checkisnull(par_margin))
        par_margin = '0  0  0 0 '
    var rtn_cmp =
    {
        xtype: 'radiofield', boxLabel: par_caption,
        name: par_name,
        labelWidth: par_l_width,
        inputValue: par_value,
        margin: par_margin,        
        //width: '100%',
        width: 120,
        flex: 20,
    }
    return rtn_cmp;
}





2023年7月30日 星期日

V40A - checkbox 及 checkboxGroup 的用法

 目的: V40A -  checkbox 及 checkboxGroup 的用法

處理說明: 1>  若單獨 checkbox ,必需設定 id , 
                        Ext.getCmp(id).getValue() à true/false
                  2>  checkboxGroup(grp_id), checkbox必需設定name=grp_id                    
                        Ext.getCmp(grp_id).getValue()=checkbox.inputValue



1>V40A.js
1>>[顯示 SAP單況]
{ xtype: 'checkbox', boxLabel: ‘顯示SAP單況’, id: ‘s_isSAPSTAT’, labelWidth : 80,inputValue: ‘Y’, margin: 0 0 0 0 , },

  è  Ext.getCmp(“s_isSAPSTAT).getValue()=true/false


2>>[約別] :  checkboxGroup

{ xtype: 'checkboxgroup', fieldLabel: ‘約別’, labelWidth: 80, layout: 'vbox', id: ‘s_TYPEAF’,

 items: [{ xtype: 'checkbox', boxLabel: ‘拆檢約’, name: ‘s_TYPEAF’, labelWidth : 80,

                         inputValue: ‘3’, margin: 0 0 0 0 , },

                      { xtype: 'checkbox', boxLabel: ‘維修約’, name: ‘s_TYPEAF’, labelWidth : 80,

                      inputValue: ‘4’, margin: 0 0 0 0 , },]

}           },}

è  Ext.getCmp(“s_TYPE”).getValue()=’3,4’   //均勾選

        Ext.getCmp(“s_TYPE”).getValue()=’3’   //拆檢約

 


2023年5月31日 星期三

V120202 -getUrlStr() - url傳回字串 - checkRtnOk() – [全部選取] [全部取消] – 允許分頁選取保留 - checkbox - url傳回值

 目的: V120202 – [全部選取] [全部取消] – 允許分頁選取保留 -checkbox

處理說明:  1>[全部選取]鈕
                                           1>將目前 store.CHECK   欄位均設為    true                                          
                                           2>cbxAry  :   將所有的  PK(APNO)     存入  cbxAry                                           


1>*. js
//全部選取 , 將所有資料 PK 加入 cbxArr 
    function SelAllBtn_click() {
        var Tmp_PKStr = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_url = "../../api/V120202API/getALLPKStr";
        var np = grid.store.getProxy().extraParams;
        var rtn = getUrlStr(Tmp_url, np, "全部選取鈕");
        if (checkRtnOK(rtn)) {
              set_PgAll();
             var Tmp_PKStr = rtn;
            setCbxArr(Tmp_PKStr);            
    }  // end of SelAllBtn_click


//全部取消 , 將所有資料 PK 加入 cbxArr 
    function unSelAllBtn_click() {
        var Tmp_PKStr = "";  //所有資料 PK 字串, 以 , 分隔
        var Tmp_url = "../../api/V120202API/getALLPKStr";
        var np = grid.store.getProxy().extraParams;
        var rtn = getUrlStr(Tmp_url, np, "全部取消鈕");
        if (checkRtnOK(rtn)) {
            //set_AllUn();            
            set_PgUn();
            resetCbxArr();
        } // end of chkRtnOk(rtn)
    }  // end of unSelAllBtn_click

2>*.cs
//取所有資料.PKStr , 並以 , 分隔
        [HttpPost]
        public dynamic getALLPKStr()
        {            
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //DataSet ds = getGridDataPage();
            //return ds;
            string Tmp_LCAA = nvc["s_LCAA"];
            string Tmp_ASN = nvc["s_ASN"];
            string Tmp_MATNR = nvc["s_MATNR"];
            string Tmp_APNO = nvc["s_APNO"];
            string Tmp_APER = nvc["s_APER"];

            string Tmp_APDT1 = "";   //申請日期  - 起迄
            string Tmp_APDT2 = "";   //申請日期  - 起迄
            if (!myfunc.checkisnull(nvc["s_APDT1"]))
            {
                Tmp_APDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_APDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_APDT2"]))
            {
                Tmp_APDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_APDT2"]));
            };

            //單況(A/B/C/D/Z)
            string Tmp_STAT = nvc["s_STAT"];


            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql = " SELECT  RNK,     "
                                       + "   APNO,LCAA,ASN,SAPNO,PN,MATNR,RPN,QTY,UNIT,"
                                       + "    APER,APDT,STAT,MPKUPP,MPKUPDT,COMPER,COMPDT,DELTP,DELTDT  "
                                       + "  FROM  ( "
                                      + "   select  dense_rank()  over(order by  APNO) as RNK,"
                                                  + "   APNO,LCAA,ASN,SAPNO,PN,MATNR,RPN,QTY,UNIT,  "
                                                  + "   APER,APDT,STAT,MPKUPP,MPKUPDT,COMPER,COMPDT,DELTP,DELTDT  "
                                      + "  FROM  AMM_COMQ "
                                      + "  Where  1=1  ";

            //機位
            if (!myfunc.checkisnull(Tmp_LCAA))
            {
                Tmp_Sql = Tmp_Sql + " AND   LCAA  = " + myfunc.AA(Tmp_LCAA);
            };
            //機號
            if (!myfunc.checkisnull(Tmp_ASN))
            {
                Tmp_Sql = Tmp_Sql + " AND   ASN= " + myfunc.AA(Tmp_ASN);
            };
            //物料編號
            if (!myfunc.checkisnull(Tmp_MATNR))
            {
                Tmp_Sql = Tmp_Sql + " AND   (       (MATNR  LIKE " + myfunc.AA("%" + Tmp_MATNR + "%") + ")"
                                                                 + "  OR  (MATNR IN (  SELECT  SPN  "
                                                                                                   + " FROM    AMM_SPN "
                                                                                                   + " WHERE  PN LIKE " + myfunc.AA("%" + Tmp_MATNR + "%")
                                                                                                   + "  AND       STATUS='A'   ) )"
                                                                + ")";
            };
            //申請單號
            if (!myfunc.checkisnull(Tmp_APNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   APNO  = " + myfunc.AA(Tmp_APNO);
            };
            //申請人
            if (!myfunc.checkisnull(Tmp_APER))
            {
                Tmp_Sql = Tmp_Sql + " AND   APER= " + myfunc.AA(Tmp_APER);
            };

            string Tmp_Sql1 = "";
            //申請日期 - 起  - 迄
            if ((!myfunc.checkisnull(Tmp_APDT1)) || (!myfunc.checkisnull(Tmp_APDT2)))
            {
                if (!myfunc.checkisnull(Tmp_APDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        APDT>=" + myfunc.AA(Tmp_APDT1);
                };
                if (!myfunc.checkisnull(Tmp_APDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        APDT<=" + myfunc.AA(Tmp_APDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };


            //單況 : 待撥料/撿料中/撿料完成/已領用/已撤銷(A/B/C/D/Z)  全部: ALL - radioboxgroup
            if (!myfunc.checkisnull(Tmp_STAT))
            {
                switch (Tmp_STAT)
                {
                    case "ALL":  //全部
                        Tmp_Sql = Tmp_Sql;
                        break;
                    default:
                        Tmp_Sql = Tmp_Sql + " AND   STAT=" + myfunc.AA(Tmp_STAT);
                        break;
                }
            };

            Tmp_Sql = Tmp_Sql + "   )   ";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            //匯出時 ,取全部資料, par_paging =false , 取全部資料
            DataSet ds = getDataTable(cmd, countSql, false);

            int Tmp_Cnt = ds.Tables["T1"].Rows.Count;
            var Tmp_PKStr = "";
            for (var i=0; i<Tmp_Cnt;i++)
            {
                DataRow dr = ds.Tables["T1"].Rows[i];
                Tmp_APNO = dr["APNO"].ToString();
                Tmp_PKStr = Tmp_PKStr + Tmp_APNO + ",";
            }
            if (Tmp_PKStr != "")
            {
                Tmp_PKStr = Tmp_PKStr.TrimEnd(',');
            }
            return Tmp_PKStr;
        }

V120202 – 勾選 checkbox , 分頁時可以保留勾選

 目的: V120202 – 勾選 checkbox , 分頁時可以保留勾選 

處理說明: 1>*_json.js  利用 cbxAry 記錄目前勾選資料的 PK(APNO)
                       var cbxArr = []; //記錄目前 PK Array ,(PK:APNO)
                       var cbxIdx = -1; //記錄目前 cbxAry 的 index
                        var curPage = 0; //記錄目前 Page (store)
                  2>*_json.js , columns 新增  CHECK欄位, onClick 會觸發 renderer event ,
                       若原本未勾選, 則變勾選, 若原本勾選,則變未勾選
                       var J_columns = [{
               header: "勾選", dataIndex: "CHECK", width: 40, xtype: 'checkcolumn',
        renderer: function (value, metadata, record, rowIndex, colIndex, store) {
                                :
                                 var i = cbxArr.indexOf(record.get('APNO'));
if ((value === 'Y') || (value === true)) {
if (i < 0) {
chkd = 'checked';
cbxIdx++;
cbxArr[cbxIdx] = record.get('APNO');
}
else {
chkd = '';
cbxArr[i] = '';
}
}
               3>*.js  , 若 store.onload 則記錄目前的 頁次(store.currentPage),且顯示 CHECK是否勾選
                         curPage=gridstore.currentPage;   
                         var idx = cbxArr.indexOf(rec.data['APNO']);
                          if (idx >= 0) {  rec.data['CHECK'] = true; }
                          else {  rec.data['CHECK'] = false; }






2022年10月4日 星期二

V20301 – checkboxGroup – 多選 -

目的: V20301 – checkboxGroup – 多選   處理

處理說明: 1>checkboxGroup – 多選  
                                     - 前端:欄位值 Array         
                                    - 後端 :欄位值以 , 分隔
                   2>顯示資料 , 必需單獨讀取  checkbox 的欄位值
                            np["s_STATFM"] = Ext.getCmp('s_STATFM').getValue();


1>*.js
 {
                        xtype: 'button',
                        id: 'btn_Show',
                        flex: 2,
                        border: 1,
                        text: '資料顯示',
                        iconCls: 'icon-search',
                        handler: function () {
                            var np = s_JSON('s_form'); //TMFunction.js, 組合form上的查詢條件為json參數傳遞
                            console.log("Ext.getCmp('s_STATFM') : ", Ext.getCmp('s_STATFM'));
                            np["s_STATFM"] = Ext.getCmp('s_STATFM').getValue();
                           //若同時勾選[v]已發工[v]已完工 , 則欄位值 Array of  :  ['B','H']
                            console.log(" np[s_STATFM]  : ", np["s_STATFM"]);    
                            var Proc_Msg;
                            try {
                                 Proc_Msg = new Ext.LoadMask(Ext.getCmp("s_PROCMSG"),
                                    { msg: '交修件資料顯示處理中, 請稍候...', }
                                );
                                Proc_Msg.show();//使用 mask 需手動呼叫show() 方法下
                                //getGridData_M --> 轉工只有曾在於工作中心就會列入  , 後來改為  [目前工作中心]=xxxx , 才顯示
                                //gridstore.getProxy().url = '../api/V80205API/getGridData_M';

                                //2022/06/15 ..過濾條件若[目前工作中心]有值,則過濾 [目前工作中心]=xxxx, 其他 工作中心資料不顯示
                                // url 改為 getGridData_M_sub_WC --> 同 [過濾目前工作中心]鈕,的處理方法 ,                                 
                                gridstore.getProxy().url = '../api/V20301API/getGridData_M';
                                gridstore.getProxy().extraParams = np; //分頁OK,篩選條件OK
                                console.log("1 reloadGridData - before");
                                Ext.getCmp('grid_Single').reloadGridData();
                                console.log("2 reloadGridData - after");
                            }
                            finally {
                                Proc_Msg.hide();  //使用 mask 需手動呼叫hide() 方法下
                            }

                        }
                    },  // end of 顯示資料
                   


 {
                        xtype: 'panel',
                        id: 'panel14',
                        layout: { type: 'vbox', align: 'stretch' },
                        //layout: { type: 'vbox'},
                        flex: 14,
                        border: 0,
                        items: [
                            {
                                xtype: 'checkboxgroup', fieldLabel: '單況', labelWidth: 40, layout: 'vbox',
                                id: 's_STATFM',
                                items: [
                                    {
                                        boxLabel: '已發工',
                                        name: 's_STATFM',
                                        inputValue: 'B',
                                        //id: 's_checkbox1'
                                    }, {
                                        boxLabel: ' 已完工',
                                        name: 's_STATFM',
                                        inputValue: 'H',                                                                                
                                    }, 
                                ]
                            }, // end of s_交修單單況    


2>*.cs

[HttpPost]
        public dynamic getGridData_M()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            //DataSet ds = getGridDataPage();
            //return ds;
            //Panel11
            string Tmp_FMNO = nvc["s_FMNO"];
            string Tmp_OGONOAF = nvc["s_OGONOAF"];
            string Tmp_NGONOAF = nvc["s_NGONOAF"];
            string Tmp_RPNOAF = nvc["s_RPNOAF"];
            string Tmp_MRPNOAF = nvc["s_MRPNOAF"];

            //Panel12
            string Tmp_PN = nvc["s_PN"];
            string Tmp_NSN = nvc["s_NSN"];
            string Tmp_EIAC_CUS = nvc["s_EIAC_CUS"];
            string Tmp_C_NM = nvc["s_C_NM"];
            string Tmp_ES_NM = nvc["s_ES_NM"];

            //Panel13
            string Tmp_WBSNO = nvc["s_WBSNO"];
            string Tmp_SEQOAF = nvc["s_SEQOAF"];
            string Tmp_FACWC = nvc["s_FACWC"];
            string Tmp_MCODE = nvc["s_MCODE"];
            string Tmp_BTDT1 = "";
            string Tmp_BTDT2 = "";
            if (!myfunc.checkisnull(nvc["s_BTDT1"]))
            {
                Tmp_BTDT1 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_BTDT1"]));
            };
            if (!myfunc.checkisnull(nvc["s_BTDT2"]))
            {
                Tmp_BTDT2 = string.Format("{0:yyyy/MM/dd}", DateTime.Parse(nvc["s_BTDT2"]));
            };

            //Panel14            
            string Tmp_STATFM = nvc["s_STATFM"];


            OracleCommand cmd = new OracleCommand();
            string Tmp_Sql1 = "";  //for 日期起迄
            string Tmp_Sql = "  SELECT  RNK, "
                                        + "  FMNO,WBSNO ,FRTP,PN,C_NM,ES_NM,NSN,RQTYAF,SEQOAF,PROID ,CDCODE,EONO,OSM,DTSOR,ISSN,EIAC_CUS,RBTHAF,FACWC,MTEMPLYID,FRNOAF,PAMMNO,SAPREMARK,REMARK,"
                                        + " OGONOAF ,NGONOAF ,RPNOAF ,MRPNOAF ,PRNRAF,CRNRAF,NRCLAF,FREDTAF,PJDT,DLEMPLYID,CREMPLYID,QDRNO,BTDT,MDDT,CSTNM,NEMPID,LGROUP,CRNO,MCODE,ENGP,STATFM,AMMNO,TYPEAF,OPHR "
                                        + "  FROM   ( SELECT  dense_rank()  over(order by  FMNO) as RNK,"
                                                         + "  FMNO,WBSNO ,FRTP,PN,C_NM,ES_NM,NSN,RQTYAF,SEQOAF,PROID ,CDCODE,EONO,OSM,DTSOR,ISSN,EIAC_CUS,RBTHAF,FACWC,MTEMPLYID,FRNOAF,PAMMNO,SAPREMARK,REMARK,"
                                                         + " OGONOAF ,NGONOAF ,RPNOAF ,MRPNOAF ,PRNRAF,CRNRAF,NRCLAF,FREDTAF,PJDT,DLEMPLYID,CREMPLYID,QDRNO,BTDT,MDDT,CSTNM,NEMPID,LGROUP,CRNO,MCODE,ENGP,STATFM,AMMNO,TYPEAF,OPHR "
                                                        + "   FROM     AMM_FM  A "
                                                       + "   WHERE  1=1 "
                                                       + "   AND        STATFM IN ('A','B','H')  ";
            //panel11
            //系統件單號
            if (!myfunc.checkisnull(Tmp_FMNO))
            {
                Tmp_Sql = Tmp_Sql + " AND    FMNO  LIKE  " + myfunc.AA("%" + Tmp_FMNO + "%");
            };
            //拆檢提領編號
            if (!myfunc.checkisnull(Tmp_OGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND    OGONOAF  LIKE  " + myfunc.AA("%" + Tmp_OGONOAF + "%");
            };
            //維修提領編號
            if (!myfunc.checkisnull(Tmp_NGONOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND    NGONOAF  LIKE  " + myfunc.AA("%" + Tmp_NGONOAF + "%");
            };
            //拆檢交修單號
            if (!myfunc.checkisnull(Tmp_RPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND    RPNOAF  LIKE  " + myfunc.AA("%" + Tmp_RPNOAF + "%");
            };
            //維修交修單號
            if (!myfunc.checkisnull(Tmp_MRPNOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND    MRPNOAF  LIKE  " + myfunc.AA("%" + Tmp_MRPNOAF + "%");
            };


            //panel12
            //件號  
            if (!myfunc.checkisnull(Tmp_PN))
            {
                Tmp_Sql = Tmp_Sql + " AND    PN  LIKE  " + myfunc.AA("%" + Tmp_PN + "%");
            };
            //料號
            if (!myfunc.checkisnull(Tmp_NSN))
            {
                Tmp_Sql = Tmp_Sql + " AND    NSN  LIKE  " + myfunc.AA("%" + Tmp_NSN + "%");
            };
            //機種
            if (!myfunc.checkisnull(Tmp_EIAC_CUS))
            {
                Tmp_Sql = Tmp_Sql + " AND    EIAC_CUS  LIKE  " + myfunc.AA("%" + Tmp_EIAC_CUS + "%");
            };

            //中文名稱
            if (!myfunc.checkisnull(Tmp_C_NM))
            {
                Tmp_Sql = Tmp_Sql + " AND   C_NM  LIKE " + myfunc.AA("%" + Tmp_C_NM + "%");
            };
            //英文簡稱
            if (!myfunc.checkisnull(Tmp_ES_NM))
            {
                Tmp_Sql = Tmp_Sql + " AND   ES_NM LIKE " + myfunc.AA("%" + Tmp_ES_NM + "%");
            };


            //panel13
            //WBS
            if (!myfunc.checkisnull(Tmp_WBSNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   WBSNO LIKE " + myfunc.AA("%" + Tmp_WBSNO + "%");
            };
            //序號
            if (!myfunc.checkisnull(Tmp_SEQOAF))
            {
                Tmp_Sql = Tmp_Sql + " AND   SEQOAF LIKE " + myfunc.AA("%" + Tmp_SEQOAF + "%");
            };
            //FACWC
            if (!myfunc.checkisnull(Tmp_FACWC))
            {
                Tmp_Sql = Tmp_Sql + " AND   FACWC LIKE " + myfunc.AA("%" + Tmp_FACWC + "%");
            };
            //MCODE
            if (!myfunc.checkisnull(Tmp_MCODE))
            {
                Tmp_Sql = Tmp_Sql + " AND    MCODE  =  " + myfunc.AA(Tmp_MCODE);
            };
            //建檔日期 - 起  - 迄
            if ((!myfunc.checkisnull(Tmp_BTDT1)) || (!myfunc.checkisnull(Tmp_BTDT2)))
            {
                if (!myfunc.checkisnull(Tmp_BTDT1))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        BTDT>=" + myfunc.AA(Tmp_BTDT1);
                };
                if (!myfunc.checkisnull(Tmp_BTDT2))
                {
                    Tmp_Sql1 = Tmp_Sql1 + "  AND        BTDT<=" + myfunc.AA(Tmp_BTDT2);
                }
                Tmp_Sql = Tmp_Sql + Tmp_Sql1;
            };


            //panel15
            //單況現況 - checkboxgroup
            if (!myfunc.checkisnull(Tmp_STATFM))
            {
                switch (Tmp_STATFM)
                {
                    case "B":  //已發工
                        //Tmp_Sql = Tmp_Sql + "AND   STATFM IN ('B','C','D','E','F','G') ";
                        Tmp_Sql = Tmp_Sql + " AND   AMMNO IN ( SELECT AMMNO FROM  AMM_SRO WHERE   AMMNO=A.AMMNO AND   SAPNO IS NOT NULL ) ";
                        break;
                    case "H":  //已完工
                        Tmp_Sql = Tmp_Sql + " AND   AMMNO IS NOT NULL  AND  STATFM ='H'   ";
                        break;
                    case "B,H":  //已發工 & 已完工均勾選
                        Tmp_Sql = Tmp_Sql 
                                         + " AND (         (AMMNO IS NOT NULL  AND  STATFM ='H')   "
                                        +      "     AND   (AMMNO IN ( SELECT AMMNO FROM  AMM_SRO WHERE   AMMNO=A.AMMNO AND   SAPNO IS NOT NULL ) )" 
                                                            +        " )";   
                        break;
                }
            };

            Tmp_Sql = Tmp_Sql + ")";

            cmd.CommandText = Tmp_Sql;
            string countSql = " SELECT COUNT(*) as total FROM (" + Tmp_Sql + ")";
            DataSet ds = getDataTable(cmd, countSql, true, true);



            //新增  CaluField 欄位  - [工單類別]            
            Tmp_Sql = " SELECT   SROTP as FRTP, SROTPNAME  "
                            + "  FROM      AMM_SROTP "
                            + "   WHERE   1=1  ";
            getKeyCode("FRTP", ref ds, Tmp_Sql);

            //新增  CaluField 欄位  - [維修人員姓名]
            Tmp_Sql = " SELECT   EMPLYID as MTEMPLYID, EMPLYNM  "
                                        + "  FROM      HR_EMPLYM ";
            getKeyCode("MTEMPLYID", ref ds, Tmp_Sql);
            //新增  CaluField 欄位  - [發工人員姓名]
            Tmp_Sql = " SELECT   EMPLYID as DLEMPLYID, EMPLYNM  "
                                        + "  FROM      HR_EMPLYM ";
            getKeyCode("DLEMPLYID", ref ds, Tmp_Sql);
            //新增  CaluField 欄位  - [管制人員姓名]
            Tmp_Sql = " SELECT   EMPLYID as CREMPLYID, EMPLYNM  "
                                        + "  FROM      HR_EMPLYM ";
            getKeyCode("CREMPLYID", ref ds, Tmp_Sql);
            //新增  CaluField 欄位  - [工程人員姓名]
            Tmp_Sql = " SELECT   EMPLYID as ENGP, EMPLYNM  "
                                        + "  FROM      HR_EMPLYM ";
            getKeyCode("ENGP", ref ds, Tmp_Sql);
            //新增  CaluField 欄位  - [專案人員姓名]
            Tmp_Sql = " SELECT   EMPLYID as NEMPID, EMPLYNM  "
                            + "  FROM      HR_EMPLYM ";
            getKeyCode("NEMPID", ref ds, Tmp_Sql);

            //新增  CaluField 欄位  - [FM單況 ]
            getKeyCode("STATFM", ref ds);
            //新增  CaluField 欄位  - [保固構改管制碼 ]
            getKeyCode("MCODE", ref ds);

            //新增  CaluField 欄位  - [約別 ]
            getKeyCode("TYPEAF", ref ds);


            return ds;

        }  // end of GetGridData_M()