easyui動態處理雙表

来源:http://www.cnblogs.com/gdsblog/archive/2017/07/12/7155879.html
-Advertisement-
Play Games

看圖說話。 需求:插入兩張表,上面的表單是第一張表的內容,下麵的兩個表格是第二張詳情表的內容,跟第一張表的id關聯 第二張表有一個列是需要用戶手動填寫添加的。 國際慣例,上代碼 後面的列我就不貼出來了 後臺的代碼就不寫了,通過ajax傳到後臺,request取出來,按照插入資料庫的格式整理好即可,如 ...


看圖說話。

需求:插入兩張表,上面的表單是第一張表的內容,下麵的兩個表格是第二張詳情表的內容,跟第一張表的id關聯

第二張表有一個列是需要用戶手動填寫添加的。

國際慣例,上代碼

複製代碼
<div id="cc" class="easyui-layout" style="width: 100%; height: 380px;">
                                <div data-options="region:'north',title:'產品詳情(雙擊添加)'" style="height: 0px;"></div>
                                <div data-options="region:'west',split:true" style="width: 580px;">
                                    <table>
                                        <tr>
                                            <td>證書:</td>
                                            <td>
                                                <input id="Certificate" class="easyui-validatebox" data-options="" /></td>
                                            <td>貨號:</td>
                                            <td>
                                                <input id="StoneID" class="easyui-validatebox" data-options="" /></td>
                                            <td colspan="2">
                                                <a id="btn" href="#" class="easyui-linkbutton" onclick="onSearch()" data-options="iconCls:'icon-search'">查詢</a>
                                            </td>
                                        </tr>
                                    </table>
                                    <table id="productList" style="height: 300px"></table>
                                </div>
                                <div data-options="region:'center'" style="padding: 5px; background: #eee;">
                                    <table id="test_grid" style="height: 300px"></table>
                                </div>
                            </div>
                        </div>
複製代碼 複製代碼
 $(function () {
        $obj = $("#test_grid");
        $('#test_grid').datagrid({
            striped: true,       //交替條紋
            fitColumns: false,   //防止水平滾動
            iconCls: "icon-save",//圖標  
            idField: 'ProductId',  //唯一列
            url: "/Admin/Purchase/GetAllItem/" + PurchaseOrderId,
            singleSelect: true,  //設置為true將只允許選擇一行
            loadMsg: '正在拼命載入,請稍後...',
            rownumbers: true,   //顯示行數
            nowrap: true,   //截取超出部分的數據
            checkOnSelect: true,//點擊一行的時候 checkbox checked(選擇)/unchecked(取消選擇)
            pageNumber: 1,//初始化分頁碼。
            showFooter: false,  //定義是否顯示行底
            columns: column,  //列
            onBeforeEdit: function (index, row) {
                row.editing = true;
                $obj.datagrid('refreshRow', index);
            },
            onAfterEdit: function (index, row) {
                row.editing = false;
                $obj.datagrid('refreshRow', index);
            },
            onCancelEdit: function (index, row) {
                row.editing = false;
                $obj.datagrid('refreshRow', index);
            }
        });
        $('#productList').datagrid({
            striped: true,       //交替條紋
            fitColumns: false,   //防止水平滾動
            iconCls: "icon-save",//圖標  
            idField: 'ProductId',  //唯一列
            url: "/Admin/WarehouseManage/GetPro",
            singleSelect: true,  //設置為true將只允許選擇一行
            loadMsg: '正在拼命載入,請稍後...',
            rownumbers: true,   //顯示行數
            pagination: true,  //底部分頁工具欄  
            nowrap: true,   //截取超出部分的數據
            checkOnSelect: true,//點擊一行的時候 checkbox checked(選擇)/unchecked(取消選擇)
            pageNumber: 1,//初始化分頁碼。
            pageSize: 10,  //初始化每頁記錄數。
            pageList: [5, 10, 20, 30, 50, 100, 200, 500],   //初始化每頁記錄數列表
            showFooter: false,  //定義是否顯示行底
            columns: searchListColumn,  //列
            onLoadError: function () {
                layer.msg("沒有查詢到記錄!");
            },
            onDblClickCell: function (rowIndex, field, value) {
                var rows = $("#productList").datagrid("getSelections");
                var ProductId = rows[0].ProductId;
                var CersNo = rows[0].CersNo;
                var CersNo2 = rows[0].CersNo2;
                var Size = rows[0].Size;
                var StoneID = rows[0].StoneID;
                var att = $("#test_grid").datagrid('getRows');
                for (var i = 0; i < att.length; i++) {
                    if (att[i].ProductId == ProductId) {
                        layer.msg("已存在!");
                        return
                    }
                }
                Controls.DataGrid.appendRow("test_grid", { "PurchaseOrderId": PurchaseOrderId, "ProductId": ProductId, "ProductPrice": null, "Size": Size, "StoneID": StoneID, "CersNo": CersNo, "CersNo2": CersNo2 });
                $("#productList").datagrid('deleteRow', rowIndex);
            }
        });
    });
複製代碼 複製代碼
    var column = [[
      {
          field: 'opt', title: "操作", width: 150, align: 'center', formatter: function (value, row, index) {
              if (row.editing) {
                  var s = '<a class="ope-save" onclick="saverow(' + index + ',this)">保存</a> ';
                  var c = '<a class="ope-cancel" onclick="cancelrow(' + index + ',this)">取消</a>';
                  return s + c;
              } else {
                  var e = '<a class="ope-edit" onclick="editrow(' + index + ',this)">設置價格</a> ';
                  var d = '<a class="ope-remove" style="color:red;" onclick="deleterow(' + index + ',this)">刪除</a>';
                  return e + "&nbsp;&nbsp;" + d;
              }
          }
      },
      {
          field: "ProductPrice", title: "價格", width: 150, align: "center",
          editor: {
              type: 'text',
              options: {
                  missingMessage: '',
                  editable: false
              }
          }
      },
      { field: "ProductId", title: "序號", width: 150, align: "center", hidden: true },
      {
          field: "StoneID", title: "貨號", width: 150, align: "center", formatter: function (value, row, index) {
              if (row.Product != null) {
                  return row.Product.StoneID;
              } else {
                  return row.StoneID;
              }
          }
      },
複製代碼

後面的列我就不貼出來了

複製代碼
var flag = false;
    //刪除記錄
    function deleterow(index, obj) {
        $obj.datagrid("selectRow", index);
        selectCurRow(obj);
        var index = getIndexAfterDel();
        var node = $obj.datagrid('getSelected');
        $obj.datagrid('deleteRow', index);
        if (node.Product != null) {
            Controls.DataGrid.appendRow("productList", { "ProductId": node.ProductId, "StoneID": node.Product.StoneID, "Size": node.Product.Size, "CersNo": node.Product.CersNo, "CersNo2": node.Product.CersNo2 });
        } else {
            Controls.DataGrid.appendRow("productList", { "ProductId": node.ProductId, "StoneID": node.StoneID, "Size": node.Size, "CersNo": node.CersNo, "CersNo2": node.CersNo2 });
        }

        flag = true;
    }

    //選中行
    function selectCurRow(obj) {
        var $a = $(obj);
        var $tr = $a.parent().parent().parent();
        var tmpId = $tr.find("td:eq(0)").text();
        $obj.datagrid('selectRecord', tmpId);
    }

    //獲取行編號
    function getIndexAfterDel() {
        var selected = $obj.datagrid('getSelected');
        var index = $obj.datagrid('getRowIndex', selected);
        return index;
    }

    //編輯行
    function editrow(index, obj) {
        flag = false;
        $obj.datagrid("selectRow", index);
        selectCurRow(obj);
        var tmpIndex = getIndexAfterDel();
        $obj.datagrid('beginEdit', tmpIndex);
    }

    //保存編輯行
    function saverow(index, obj) {
        selectCurRow(obj);
        var tmpIndex = getIndexAfterDel();
        $obj.datagrid('endEdit', tmpIndex);
        flag = true;
    }

    //取消
    function cancelrow(index, obj) {
        selectCurRow(obj);
        var tmpIndex = getIndexAfterDel();
        $obj.datagrid('cancelEdit', tmpIndex);
    }

    //搜索
    function onSearch() {
        $("#productList").datagrid('load', {
            CersNo: $("#Certificate").val().trim(),
            StoneID: $("#StoneID").val().trim()
        });
    }

    function Save() {
        if ($("#SuppliersId").val() == "-1") {
            flag = false;
            layer.msg("請選擇供應商!");
            return;
        } else {
            flag = true;
        }
        if (flag) {
            var att = $("#test_grid").datagrid('getRows');
            var a = false;
            for (var i = 0; i < att.length; i++) {
                if (att[i].editing != null) {
                    delete att[i].editing;
                }
                if (att[i].IsStatus != null) {
                    delete att[i].IsStatus;
                }
                if (att[i].Product != null) {
                    att[i].ProductId = att[i].Product.ProductId;
                    att[i].CersNo = att[i].Product.CersNo;
                    att[i].CersNo2 = att[i].Product.CersNo2;
                    att[i].Size = att[i].Product.Size;
                    att[i].StoneID = att[i].Product.StoneID;
                    delete att[i].Product;
                }
                if (att[i].ProductNum != null) {
                    delete att[i].ProductNum;
                }
                if (att[i].PurchaseOrder == null) {
                    delete att[i].PurchaseOrder;
                }
                if (att[i].PurchaseOrderItemId) {
                    delete att[i].PurchaseOrderItemId;
                }
            }
            var bodyData = JSON.stringify(att);

            var postData = {
                PurchaseOrderId: $("#PurchaseOrderId").val().trim(),
                PurchaseOrderNo: $("#PurchaseOrderNo").val().trim(),
                SuppliersId: $("#SuppliersId").val(),
                ContractNo: $("#ContractNo").val().trim(),
                PurchaseDate: $("#PurchaseDate").val().trim(),
                Amount: $("#Amount").val().trim(),
                PayMethod: $("#PayMethod").val().trim(),
                PurchaseUser: $("#PurchaseUser").val().trim(),
                Remarks: $("#Remarks").val().trim(),
                CustomsNo: $("#CustomsNo").val().trim(),
                CustomsApproval: $("#CustomsApproval").val().trim(),
                InOutDate: $("#InOutDate").val().trim(),
                Tariff: $("#Tariff").val().trim(),
                LogisticsTotal: $("#LogisticsTotal").val().trim(),
                IsStatus: $("#IsStatus").val(),
                bodyData: bodyData
            };

            $.ajax({
                type: "POST",
                url: "/Admin/Purchase/AddPurOrder",
                data: postData,
                success: function (result) {
                    if (result == "-1") {
                        layer.msg("操作失敗!", { icon: 2 });
                    } else if (result == "0") {
                        layer.msg("操作成功!", { icon: 6, time: 1000 });
                        window.location.href = "/Admin/Purchase/PurchaseForm?cid=33";
                    } else if (result == "-2") {
                        layer.msg("您的採購單已添加,但詳情因意外未成功添加!", { icon: 2 });
                    }
                }
            });
        } else {
            layer.msg("請先保存正在編輯的行!");
        }
    }
複製代碼

後臺的代碼就不寫了,通過ajax傳到後臺,request取出來,按照插入資料庫的格式整理好即可,如果不會,翻看我前面的隨筆,有詳細的代碼。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 解決網卡無法自動獲取IP址的方法 為了省錢或者一戶多機,很多人都購買寬頻路由器共用上網。在架設路由上網的時候,有些“師傅”可能不懂或是偷懶,開啟了寬頻路由器的DHCP( Dynamic Host Configuration Protocol(動態主機分配協議))功能,這樣,其他機子只要設置“自動獲取 ...
  • 背水一戰 Windows 10 之 控制項(集合類 - ListViewBase): ListView, GridView ...
  • 因為這個解法有點複雜,因此單獨開一貼介紹。《演算法(第四版)》中的題目是這樣的:1.3.49棧與隊列。用有限個棧實現一個隊列,保證每個隊列操作(在最壞情況下)都只需要常數次的棧操作。那麼這裡就使用六個棧來解決這個問題。這個演算法來自於這篇論文。原文里用的是 Pure Lisp,不過語法很簡單,還是很容易... ...
  • 一、摘要 1.1、為什麼叫本次的分享課叫《修煉手冊》? 阿笨希望本次的分享課中涉及覆蓋的一些小技巧、小技能給您帶來一些幫助。希望您在日後工作中把它作為一本實際技能手冊進行儲備,以備不時之需,一旦當手頭遇到與Dapper修煉手冊中相似用法的地方和場景,可以直接拿來進行翻閱並靈活的運用到項目中。最後阿笨 ...
  • 1 文件夾/文件 檢查、新增、複製、移動、刪除,2 文件讀寫,記錄文本日誌/讀取配置文件3 三種序列化器4 xml和json1.文件夾/文件 檢查、新增、複製、移動、刪除,2 文件讀寫,記錄文本日誌/讀取配置文件 日誌方法 3 三種序列化器 在序列化類之前先用 [Serializable] //必須 ...
  • 本文屬於原創,轉載請註明出處,謝謝! 一、開發環境 操作系統:Windows 10 開發環境:VS2015 編程語言:C# IIS版本:10.0.0.0 二、添加WCF服務、Internet Information Services(IIS) 1、進入“控制面板”,打開“程式和功能”,點擊左上角的“ ...
  • 生成解決方案 F6,生成項目Shift+F6 調試執行F5,終止調試執行Shift+F5 執行調試Ctrl+F5 查找下一個F3,查找上一個Shift+F3 附加到進程Ctrl+Alt+P,逐過程F10,逐語句執行F11 切換斷點F9(添加或取消斷點) 運行至游標處Ctrl+F10 跳出當前方法Sh ...
  • 要求大概就是,選定一段時間周期,勾選周日至周六,把時間周期符合要求的日期返回,例如:勾選了周日,就把時間周期內所有是周日的日期返回,勾選了周日和周五,就把時間周期內所有周五和周日的日期返回。重覆間隔是以時間周期內的星期為單位進行跳選,間隔為0時,每個星期都遍歷,間隔為1時,遍歷完第一周,跳到第三周再 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...