2022年10月7日 星期五

Grid 複選 - checkboxModel 的網路範例

Grid 複選 - checkboxModel 的網路範例

https://www.twblogs.net/a/5b8cc2872b717718833524ea


 

Ext --Grid複選框列

在網上找了好多但是都是所問非所答,最後找到了兩篇比較好的文章,記錄下


今天我們主要介紹一下grid的單選、多選功能,並告訴小夥伴們如何顯示一個選擇框列

extjs grid默認支持單選

在前面幾節的例子中,我們已經見識了extjs grid的強大。今天說到單選和多選,我們不妨打開前面的例子,其實在grid默認的情況下已經可以進行單選的,如圖:

image

extjs grid的行選擇

在extjs grid的配置項中,有兩個配置項和選擇有關:

  • selModel:選擇類型的對象,或者選擇類型的配置對象,可以進行更多的配置(單選、多選,多選框的位置等)
  • selType:選擇類型的字符串,不能進行更多的設置

selModel示例:

xtype: "grid",
store: myStore,
selModel: {
    selection: "rowmodel",
    mode: "MULTI"
},
columns: [
    { xtype: "rownumberer", text: "行號", width: 50 },
    { text: "姓名", dataIndex: "Name" },
    { text: "年齡", dataIndex: "Age" }
]

selType示例:

xtype: "grid",
store: myStore,
selType: "checkboxmodel",
columns: [
    { xtype: "rownumberer", text: "行號", width: 50 },
    { text: "姓名", dataIndex: "Name" },
    { text: "年齡", dataIndex: "Age" }
]

extjs grid 多行選則

上面已經介紹瞭如何進行選擇,下面就是實際的多選了。默認情況下extjs grid的選擇模型爲rowmodel,我們可以通過rowmodel進行行選擇(還有一個cellmodel,是用來進行單元格選擇的)。

rowmodel默認的選擇模型爲單行的選擇,也就是我們最開始看到的,只能選中一行,要想讓它支持多行選擇,就要進行相應的配置:

selModel: {
    selection: "rowmodel",
    mode: "MULTI"
}

注意配置項mode,這傢伙用來控制是單行選擇還是多行選擇的,可用的值有3個:

  • SINGLE:單行選擇
  • SIMPLE:多行選擇,單擊選中/取消選中行
  • MULTL:多行選擇,支持CTRL、SHIFT功能鍵,如果要進行多選,需要按住ctrl鍵。用shift可以進行區域選擇

extjs grid 使用多選框

使用選擇框的選擇模型是checkboxmodel,來看看下面的代碼:

xtype: "grid",
store: myStore,
selModel: Ext.create("Ext.selection.CheckboxModel", {
    injectCheckbox: 1,//checkbox位於哪一列,默認值爲0
    mode: "single",//multi,simple,single;默認爲多選multi
    checkOnly: true,//如果值爲true,則只用點擊checkbox列才能選中此條記錄
    allowDeselect: true,//如果值true,並且mode值爲單選(single)時,可以通過點擊checkbox取消對其的選擇
    enableKeyNav: true
}),
columns: [
    { xtype: "rownumberer", text: "行號", width: 50 },
    { text: "姓名", dataIndex: "Name" },
    { text: "年齡", dataIndex: "Age" }
]

效果如下:

image

extjs grid 獲取選中行

要得到選中行,我們首先要找到grid,然後得到grid的selectionModel,然後再找到選擇行,代碼如下:

var grid = win.down("grid");
var records = grid.getSelectionModel().getSelection();
Ext.MessageBox.alert("提示", records.length);

大家都知道GridPanel是一個非常好用的控件,但是沒有像C#一樣的自定義的複選框。那我們就手工給它加一個複選框列,並實現全選清除獲取選中的數據。以下GridPanel簡稱GP。

第一種:自己增加一個CheckColumn來實現選中與否

1.首先在GP的Store裏面增加一個是否選中的字段源:<ext:ModelField Name="IsSelect" Type="Boolean" DefaultValue="0"/>。因爲不用數據庫返回,所以直接設置默認值爲0,不選中。

2.在GP的ColumnModel裏,增加我們的第一行復選框:<ext:CheckColumn runat="server" ID="c1" Text="選擇" Editable="true" DataIndex="IsSelect" Width="40" /> 。

3.實現點擊複選框的時候界面能夠實現選中狀態。在GP的事件裏增加CellClick,我們命名爲:clickOne。

4.function clickOne(gridview, td, value, data, tr) {
        if (data.data.IsSelect)
            data.data.IsSelect = 1;
        else data.data.IsSelect = 0;
        App.GP.store.commitChanges();
        App.GP.view.refresh();
    }。其實就是改變數據源的IsSelect字段的值,然後在刷新GP,界面上看到的就是選中狀態了。

那麼接下來我們實現全選和清除全選就簡單多了。在GP增加2個全選和清除按鈕。調用的事件如下:

//清除所有選擇
    function clear() { 
         var dataList = App.GP.store.data.items;
         if (dataList.length > 0) {
             for (var i = 0; i < dataList.length; i++) {
                 var data = dataList[i].data;
                 if (data.IsSelect == 1) {
                     data.IsSelect = 0;
                 }
             }
         }
         App.GP.store.commitChanges();
         App.GP.view.refresh();
     }
     //全部選擇
     function selectAllMasterial() {
         var dataList = App.GP.store.data.items;
         if (dataList.length > 0) {
             for (var i = 0; i < dataList.length; i++) {
                 var data = dataList[i].data;
                 if (data.IsSelect == 0) {
                     data.IsSelect = 1;
                 }
             }
         }
         App.GP.store.commitChanges();
         App.GP.view.refresh();
     }

即可。

得到選中的數據則更簡單了:

var dataList = App.GP.store.data.items;
        if (dataList.length > 0) {
               for (var i = 0; i < dataList.length; i++) {
                      var data = dataList[i].data;
                      if (data.IsSelect == 1) {

//這裏就是你要獲取得到的數據,然後執行你自己的操作了

       }

       }

}

 

第二種:就是EXT.NET自帶的SelectionModel

1.在GP裏增加一個選中模板:

<SelectionModel>
<ext:CheckboxSelectionModel ID="CheckboxSelectionModel1" Mode="Multi" runat="server">

//這裏,可以加一系列的選中事件,這裏只列出了3個,其他自己去看看還有哪些
<Listeners>

<BeforeSelect Fn="" />

<Deselect Fn="" />

<Select FN="" />
 </Listeners>
</ext:CheckboxSelectionModel>
 </SelectionModel>

2.如果需要特殊處理,就在選中模板裏添加自己的事件。

3.獲取選中的數據:App.gpContractList.selModel.selected;即可。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

轉自:https://blog.csdn.net/evilcry2012/article/details/52918064

轉自:https://blog.csdn.net/lijingrong_ljr/article/details/50555336

2022年10月6日 星期四

測試區上線 - WEB.config - remark

測試區上線發佈時, web.config 檔案

1>修改  web.config

   如下 Username 程式行,不可 remark <!--     /-->   

    <!-- *** server端帳密,發行時請取消註解 ***-->

    <identity impersonate="true" userName="webadmin" password="Aidc@856+123" />


2>建置 à 發佈TLSWEB_AMM à發佈


3>上傳至測試區目錄  \\192.30.8.240\tlsweb_amm5







2022年10月5日 星期三

V20107 - 工作程序維護 - MDD 顯示 - Master-Detail-Detail - 多個Detail處理 - 重新顯示Detail

目的:  V20107 - MDD Master-Detail-Detail 維護

處理說明:  1>設定 MD_DB 參數
                        var MD_DB = Ext.create('MD_DB', {
                                                                         apiName: 'V20107',
                                                                         table_M: 'AMM_WKSTP',
                                                                         aKey_M: ['MITM'],
                                                                         table_D: ['AMM_WKSTPD'],
                                                    });
                    2>Master selectchange: 重新顯示 Detail 
                        Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
                                                                  MD_DB.reloadDetailStore(selections[0]);
                        });

                    3>Detail selectchange: 重新顯示 Detail_Detail
                        Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {
      MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']);
    });  






1>*.js

Ext.onReady(function () {

    var TMMDViewEdit = Ext.create('TMMDViewEdit');
    
    var MD_DB = Ext.create('MD_DB', {
        apiName: 'V20107',
        table_M: 'AMM_WKSTP',
        aKey_M: ['MITM'],
        table_D: ['AMM_WKSTPD'],
        /*  // ??  如下add_np 為 undefined
        add_np: {
            aKey_D: ['MITM', 'WITM'],
            table_D1: ['AMM_WKSTPDD'],
            aKey_D1: ['MITM', 'WITM', 'DDITM'],
        },
        */
    });

    Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        MD_DB.reloadDetailStore(selections[0]);
    });

    Ext.getCmp('grid_D').on("selectionchange", function (view, selections, options) {

        MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, ['MITM', 'WITM', 'DDITM']);

        //MD_DB.reloadDetailStorebyId_P("grid_D1", selections[0], MD_DB.apiName, MD_DB.aKey_D1 );
        console.log("grid_D  selectionchange:");
        //MD_DB.reloadDetailStore(selections[0]);
        console.log("selections[0]", selections[0]);
        console.log("MD_DB.apiName:", MD_DB.apiName);
        console.log("MD_DB.add_np:", MD_DB.add_np);
        console.log("MD_DB.aKey_D1:", MD_DB.aKey_D1);
        console.log("MD_DB.add_np.aKey_D1:", MD_DB.add_np.aKey_D1);
        console.log("MD_DB.aKey_M:", MD_DB.aKey_M);
        console.log("MD_DB.aKey_D:", MD_DB.aKey_D);        
    });


2>*.cs
//取得 Detail 資料
[HttpPost]
        public dynamic getGridData_D()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;                        
            setDBTable("AMM_WKSTPD");
            
            OracleCommand cmd = new OracleCommand();
            string Tmp_MITM = nvc["MITM"];            
            string Tmp_Sql;
            Tmp_Sql = " SELECT RNK,MITM,WITM,STP,AQTY,PQTY,WHR,WDT,DWC  "
                                    + "  FROM  ("
                                    + "  SELECT dense_rank() over(order by MITM,WITM) as RNK,MITM,WITM,STP,AQTY,PQTY,WHR,WDT,DWC  "
                                    + "  FROM   AMM_WKSTPD "
                                    + " WHERE  1=1 ";
            //工作編號
            if (!myfunc.checkisnull(Tmp_MITM))
            {
                Tmp_Sql = Tmp_Sql + " AND   MITM=" + myfunc.AA(Tmp_MITM);
                //cmd.Parameters.Add(":PROCWC", Tmp_PROCWC);
            };
            
            Tmp_Sql = Tmp_Sql + " ORDER BY MITM,WITM,STP  ) ";
            cmd.CommandText = Tmp_Sql;
            string Tmp_cntSql = " SELECT COUNT(*) as total  FROM  (" + Tmp_Sql + ")";
            DataSet ds = getDataTable(cmd, Tmp_cntSql);                        
            return ds;
        }

//取得 Detail-Detail資料
[HttpPost]
public dynamic getGridData_D1()
{
var c = HttpContext.Current;
NameValueCollection nvc = c.Request.Form;
OracleCommand cmd = new OracleCommand();
setDBTable("AMM_WKSTPDD");
            string Tmp_MITM = nvc["MITM"];
            string Tmp_WITM = nvc["WITM"];

            string Tmp_Sql;
            Tmp_Sql = " SELECT RNK,MITM,WITM,DDITM,STP,WC,NOTE,CLASS,WHR  "
                                    + "  FROM  ("
                                    + "  SELECT dense_rank() over(order by MITM,WITM,DDITM) as RNK,MITM,WITM,DDITM,STP,WC,NOTE,CLASS,WHR  "
                                    + "  FROM   AMM_WKSTPDD  "
                                    + " WHERE  1=1 ";
            //工作編號
            if (!myfunc.checkisnull(Tmp_MITM))
            {
                Tmp_Sql = Tmp_Sql + " AND   MITM=" + myfunc.AA(Tmp_MITM);                
            };
            //工作步序
            if (!myfunc.checkisnull(Tmp_WITM))
            {
                Tmp_Sql = Tmp_Sql + " AND   WITM=" + myfunc.AA(Tmp_WITM);                
            };

            Tmp_Sql = Tmp_Sql + " ORDER BY MITM,WITM,DDITM,STP  ) ";
            cmd.CommandText = Tmp_Sql;

            string Tmp_cntSql = " SELECT COUNT(*) as total  FROM  (" + Tmp_Sql + ")";
            DataSet ds = getDataTable(cmd, Tmp_cntSql);            
            return ds;
        }


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()

2022年10月3日 星期一

V120703 人員排訓資料維護 – MD 維護

 V120703 人員排訓資料維護 – MD 維護

處理說明: 1>Master資料移動時, 顯示目前M資料的Detail資料

                  2>按[修改]鈕時, 允許編輯 Detail 的資料   


     Detail 新增



1>*.js - Master資料移動時, 顯示目前M資料的Detail資料

Ext.onReady(function () {

   var TMMDViewEdit = Ext.create('TMMDViewEdit');
    //var gridstore = Ext.getCmp('grid_Single').store;
    
    var MD_DB = Ext.create('MD_DB', {
        apiName: 'V120703',
        table_M: 'AMM_TRPM',
        aKey_M: ['TRNO','EMPLYID'],
        table_D: ['AMM_TRPD']
    });

    grid_D = Ext.getCmp('grid_D');

//Master資料移動時, 顯示目前M資料的Detail資料
 Ext.getCmp('grid_M').on("selectionchange", function (view, selections, options) {
        console.log("selectionchange !!");
        console.log("selections[0]: ", selections[0]);
        MD_DB.reloadDetailStore(selections[0]);
    });

Ext.getCmp('grid_M').addDocked({
        dockedItems: [{
            items: [Query]
        }]
    });

//設定 edit,add 的畫面屬性設定
    Ext.getCmp('btn_edit').on("click", function () {
        setFieldsCls('myform',['TRNO','EMPLYID','MUSTTR'],[],[]);
showFormButton('myform',['btn_TRNO','btn_EMPLYID','btn_MUSTTR']);
    });

    Ext.getCmp('btn_add').on("click", function () {
        setFieldsCls('myform',['TRNO','EMPLYID','MUSTTR'],[],[]);
showFormButton('myform',['btn_TRNO','btn_EMPLYID','btn_MUSTTR']);
    });


2>[修改]鈕, 按此鈕, 允許修改 Detail 的新增 & 修改
 //Detail新增
    Ext.getCmp('btn_add_D').on("click", function () {
    setFieldsCls('myform_D', [], [], ['d_TRNO', 'd_EMPLYID', 'd_ITM', 'd_CMPDT', 'd_TECLV', 'd_SCHTRDT']);
        //取得Master目前的 TRNO 及 EMPLYID
        var cur_rec = Ext.getCmp("grid_M").getSelectionModel().getSelection();
        if (cur_rec.length > 0) {
            var cur_TRNO = cur_rec[0].get("TRNO");
            var cur_EMPLYID = cur_rec[0].get("EMPLYID");
            console.log("cur_TRNO=", cur_TRNO);
            var Tmp_MaxITM = Number(getMaxITM(cur_TRNO, cur_EMPLYID))+1;
            console.log("Tmp_MaxITM=", Tmp_MaxITM);
            Ext.getCmp("d_ITM").setValue(Tmp_MaxITM);
        }        
    });

    //取得下一 [項次(ITM)]
    function getMaxITM(par_TRNO,par_EMPLYID) {
        var Tmp_Sql;
        Tmp_Sql = "  SELECT   MAX(ITM) "
                       +"  FROM     AMM_TRPD "
                       + "  WHERE  TRNO = " + AA(par_TRNO)
                       +"   AND       EMPLYID = "+AA(par_EMPLYID);
        var Tmp_Str;        
        Tmp_Str = SqlValue(Tmp_Sql);        
        console.log("1 Tmp_Str: ", Tmp_Str);
        if (checkisnull(Tmp_Str)) {
            Tmp_Str = "0";
        };
        console.log("2 Tmp_Str=", Tmp_Str);
        return Tmp_Str;
    };


3> [Detail].新增
 //Detail新增
    Ext.getCmp('btn_add_D').on("click", function () {
        setFieldsCls('myform_D', [], [], ['d_TRNO', 'd_EMPLYID', 'd_ITM', 'd_CMPDT', 'd_TECLV', 'd_SCHTRDT']);
        //取得Master目前的 TRNO 及 EMPLYID
        var cur_rec = Ext.getCmp("grid_M").getSelectionModel().getSelection();
        if (cur_rec.length > 0) {
            var cur_TRNO = cur_rec[0].get("TRNO");
            var cur_EMPLYID = cur_rec[0].get("EMPLYID");
            console.log("cur_TRNO=", cur_TRNO);
            var Tmp_MaxITM = Number(getMaxITM(cur_TRNO, cur_EMPLYID))+1;
            console.log("Tmp_MaxITM=", Tmp_MaxITM);
            Ext.getCmp("d_ITM").setValue(Tmp_MaxITM);
        }        
    });

    //取得下一 [項次(ITM)]
    function getMaxITM(par_TRNO,par_EMPLYID) {
        var Tmp_Sql;
        Tmp_Sql = "  SELECT   MAX(ITM) "
                       +"  FROM     AMM_TRPD "
                       + "  WHERE  TRNO = " + AA(par_TRNO)
                       +"   AND       EMPLYID = "+AA(par_EMPLYID);
        var Tmp_Str;        
        Tmp_Str = SqlValue(Tmp_Sql);        
        console.log("1 Tmp_Str: ", Tmp_Str);
        if (checkisnull(Tmp_Str)) {
            Tmp_Str = "0";
        };
        console.log("2 Tmp_Str=", Tmp_Str);
        return Tmp_Str;
    };


2>*.cs  顯示 Detail 資料

[HttpPost]
        public dynamic getGridData_D()
        {
            var c = HttpContext.Current;
            NameValueCollection nvc = c.Request.Form;
            OracleCommand cmd = new OracleCommand();
            string Tmp_TRNO = nvc["TRNO"];
            string Tmp_EMPLYID = nvc["EMPLYID"];
            string Tmp_Sql;
            Tmp_Sql = " SELECT RNK,TRNO ,EMPLYID ,ITM ,TECLV ,CMPDT ,SCHTRDT  "
                                    + "  FROM  ("
                                    + "  SELECT dense_rank() over(order by TRNO,EMPLYID,ITM) as RNK,TRNO ,EMPLYID ,ITM ,TECLV ,CMPDT ,SCHTRDT  "
                                    + "  FROM   AMM_TRPD "
                                    + " WHERE  1=1 ";                                    
            //課程編號
            if (!myfunc.checkisnull(Tmp_TRNO))
            {
                Tmp_Sql = Tmp_Sql + " AND   TRNO=" + myfunc.AA(Tmp_TRNO);
                //cmd.Parameters.Add(":PROCWC", Tmp_PROCWC);
            };
            //人員編號 
            if (!myfunc.checkisnull(Tmp_EMPLYID))
            {
                Tmp_Sql = Tmp_Sql + " AND   EMPLYID=" + myfunc.AA(Tmp_EMPLYID);
                //cmd.Parameters.Add(":DEPID", Tmp_DEPID);
            };
            
            Tmp_Sql = Tmp_Sql + " ORDER BY TRNO,EMPLYID,ITM  ) ";
            cmd.CommandText = Tmp_Sql;

            string Tmp_cntSql = " SELECT COUNT(*) as total  FROM  (" + Tmp_Sql + ")";
            DataSet ds = getDataTable(cmd, Tmp_cntSql);
            setDBTable("AMM_TRPD");
            /*
            string csSQL = " AND TRNO = :TRNO "
                                 + "  AND  EMPLYID=:EMPLYID ";
            cmd.CommandText = csSQL;
            cmd.Parameters.Add(":TRNO", TRNO);
             cmd.Parameters.Add(":EMPLYID", EMPLYID); 
             setDBTable("AMM_TRPD");
            DataSet ds = getGridDataPage(cmd);
            */

            //新增  CaluField 欄位  - [技術水準 ]
            getKeyCode("TECLV", ref ds);


            return ds;
        }