淺談Bootstrap中如何直接輸入表格行資料(2)

青灯夜游
發布: 2021-06-11 10:54:08
轉載
2109 人瀏覽過

這篇文章跟大家介紹一下在Bootstrap開發框架中使用dataTable直接錄入表格行資料的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

淺談Bootstrap中如何直接輸入表格行資料(2)

在《淺談Bootstrap中如何直接錄入表格行資料(1)》中介紹了在Web頁面中使用Jquery DataTable外掛程式進行對資料直接錄入操作,這種處理能夠提供使用者較好的資料輸入體驗,本篇繼續上篇的內容,繼續介紹這個直接錄入的處理操作,主要涉及到控制項的初始化和資料來源的綁定等操作內容,隨著對這個處理的深入了解,我發現可以控制的內容也更加豐富,能夠更好的實現各種所需的效果。

【相關推薦:《bootstrap教學》】

1、直接錄入資料的介面分析

在之前介紹的資料直接錄入處理的時候,介面效果如下所示。

上面的介面處理明細資料的時候,可以直接使用新增記錄,直接在輸入框中輸入數據,然後儲存起來,儲存後資料變成唯讀,如果需要修改,也可以點選編輯按鈕進行修改。

而這些明細的數據,也僅僅存在JS的物件裡面,還沒有保存到後台資料庫中,我們可以在最後保存(如上界面的確定按鈕)處理中再獲取全部添加的數據進行提交即可。

以上的明細資料輸入,只是提供了一些基本的輸入控制進行輸入,沒有進行過多的定制處理,而往往使用的時候,我們發現,有些資料是需要下拉列表的,有些是需要使用日期選擇的等等,那麼我們就需要考慮更深層的控制顯示問題了。

如我們要實現更豐富的效果處理,甚至包括一些控制項之間的連動的處理,那麼我們該如何操作呢?

下拉列表,動態資料介面展示

日期輸入框顯示

以上一些是我們常規的輸入方式,對於有一些比較多樣化的操作,我們盡可能為用戶提供方便,提供下拉控制給用戶選擇,畢竟選擇比錄入更加方便、規範化。

如可以在複雜介面中,使用彈出層進行查詢選擇

如部門與使用者之間的資料連動效果如下所示。

以上種種效果,能夠滿足我們常規的資料選擇輸入的方便,從而方便客戶直接輸入資料處理。

2、直接輸入資料的控制項初始化

我們從上文可以了解到,對於新增一套記錄,就是動態建構一些HTML的控件,然後進行初始化即可,如對於這個下拉清單的介面效果。

它的實作主要就是在編輯或新增的時候,對HTML控制項的處理,如下程式碼所示。

//编辑行
    function editRow(oTable, nRow) {
        var aData = oTable.fnGetData(nRow);
        var jqTds = $('>td', nRow);
        var i = 0;
        var feeType = aData[0];
        jqTds[i].innerHTML = &#39;<select id="txtFeeType" class="form-control input-small" value="&#39; + aData[0] + &#39;"></select>&#39;;
        i++; jqTds[i].innerHTML = &#39;<input id="txtOccurTime" class="form-control input-small" value="&#39; + aData[1] + &#39;">&#39;;
        i++; jqTds[i].innerHTML = &#39;<input id="txtFeeAmount" type="number" class="form-control input-small" value="&#39; + aData[2] + &#39;">&#39;;
        i++; jqTds[i].innerHTML = &#39;<input id="txtFeeDescription" type="text" class="form-control input-small" value="&#39; + aData[3] + &#39;">&#39;;                 
        i++; jqTds[i].innerHTML = &#39;<a class="btn btn-xs green edit" href="" title="保存">保存</a>&#39;;
        i++; jqTds[i].innerHTML = &#39;<a class="btn btn-xs red cancel" href="" title="取消"><span class="glyphicon glyphicon-share-alt "></span></a>&#39;;

        //绑定数据字典,并更新值
        BindDictItem("txtFeeType", "费用类型", function () {
            $("#txtFeeType").val(feeType).trigger("change");
        });
        //初始化日期控件
        $("#txtOccurTime").datepicker({
            language: &#39;zh-CN&#39;, //语言
            autoclose: true, //选择后自动关闭
            clearBtn: true,//清除按钮
            format: "yyyy-mm-dd"//日期格式
        });
    }
登入後複製

我們可以在下拉清單的時候,使用select2插件,透過BindDictItem的通用JS函數,可以綁定資料庫的字典類型,並透過記錄對應列的值,可以給該控制項進行賦值。

$("#txtFeeType").val(feeType).trigger("change");
登入後複製

由於每個控制項都有一個對應的ID,那麼我們使用它們的時候,就很方便,如初始化日期插件,可以使用DateTime Picker插件來處理。

//初始化日期控件
        $("#txtOccurTime").datepicker({
            language: &#39;zh-CN&#39;, //语言
            autoclose: true, //选择后自动关闭
            clearBtn: true,//清除按钮
            format: "yyyy-mm-dd"//日期格式
        });
登入後複製

最終達到了日期選擇效果。

使用彈出層進行查詢選擇的操作過程也很簡單。

jqTds[i].innerHTML = &#39;<input id="txtAssetName" type="text" class="form-control input-small" onclick="SelectAssets(this)" value="&#39; + aData[i] + &#39;">&#39;;//资产名称
登入後複製

也就是為這個控制項增加onclick函數,在選擇點選輸入的時候,彈出一個層來處理即可。而這個獨立的通用層,則使用一個單獨的視圖,在頁面裡面引用即可,提高重用性。

@RenderPage("~/Views/Asset/SelectAsset.cshtml")
登入後複製

而透過在頁裡面處理傳回結果,則可以實現主介面內容控制項的更新。

//选择结果
function SelectResult() {
    var dict = {};
    addAssetKeyList.forEach(function (key, index, array) {
        var display = addAssetDisplayList[index];
        dict[key] = display;
    });

    //转换选择为JSON字符串
    var json = JSON.stringify(dict);
    $("#selectAsset").modal("hide");

    //留给调用的界面实现这个函数,实现数据的返回出来
    ProcAssetJson = json;
    OnSelectAsset(json);
}
登入後複製

而選擇後,可以對控制項內容以及關聯的資料進行動態更新。

//选择资产后调用
        function OnSelectAsset(json) {
            ProcAssetJson = json;//存储到ProcAssetJson,方便下次打开界面初始化数据
            if (json != &#39;&#39;) {
                var dict = JSON.parse(json);
                if (dict != null) {
                    for (var key in dict) {
                        var display = dict[key];
                        assetInput.val(display);

                        //更新数据
                        $.getJSON("/Asset/FindByCode?code=" + key, function (info) {
                            if (info != null) {
                                $("#txtAssetCode").val(info.Code);
                                //$("#txtKeepAddr").val(info.KeepAddr);
                                $("#txtUnit").val(info.Unit);
                                $("#txtPrice").val(info.Price);
                                $("#txtTotalQty").val(info.Qty);
                                $("#txtTotalAmount").val(info.OriginValue);
                            }
                        });
                    };
                }
            }
        }
登入後複製

以下就是彈出介面層,並提供使用者選擇內容的介面

对于部门和用户之间的数据联动的处理,也是通过Select2控件的联动更新处理实现的。以下是Select2联动处理脚本,可以实现多个控件之间的联动操作

//部门编号后,用户列表编号
$("#txtLyDept").on("change", function (e) {
    var deptNameId = $("#txtLyDept").val();
    if (deptNameId != null) {
        var id = deptNameId.substring(deptNameId.lastIndexOf("|") + 1);
        BindSelect("txtUsePerson", "/User/GetUserDictJson2?deptId=" + id, &#39;&#39;, function () {
            $("#txtUsePerson").val(userid).trigger("change");
        });

        //存储位置
        BindSelect("txtKeepAddr", "/StoreAddress/GetDictJson?deptId=" + id, &#39;&#39;, function () {
            $("#txtKeepAddr").val(keepAddr).trigger("change");
        });
    }
});
登入後複製

界面效果如下所示。

由于我们在控件的ID上约定了以txt开头,那么我们通过这个约定规则动态获取控件的值也是很方便的,这样为我们保存控件的数据提供很好的便捷处理。

//保存行数据,切换到普通模式
var inputLength = 10;//输入的字段数
function saveRow(oTable, nRow) {
    //var jqInputs = $(&#39;input&#39;, nRow);
    var jqInputs = $("[id^=&#39;txt&#39;]", nRow);//id以txt开始([id^=&#39;txt&#39;]), id以txt结束([id$=&#39;txt&#39;])

    //更新行中每个input的值
    for (var i = 0; i < inputLength; i++) {
        oTable.fnUpdate(jqInputs[i].value, nRow, i, false);
        iLen = i;
    }

    oTable.fnUpdate(&#39;<a class="btn btn-xs green edit" href="" title="编辑"><span class="glyphicon glyphicon-edit"></span></a>&#39;, nRow, inputLength, false);
    oTable.fnUpdate(&#39;<a class="btn btn-xs red delete" href="" title="删除"><span class="glyphicon glyphicon-remove"></span></a>&#39;, nRow, inputLength + 1, false);
    oTable.fnDraw();
}
登入後複製

我们如果需要保存数据到数据库里面,那么就需要先构建好对应的JS数据对象,然后调用ajax进行数据的提交处理。构建JS数据对象如下代码所示(根据自己所需定制数据内容)。

//获取表格的数据,并返回对象列表
            function GetData() {
                var list = [];
                var trs = table.fnGetNodes();
                for (var i = 0; i < trs.length; i++) {
                    var data = table.fnGetData(trs[i]);//获取指定行的数据

                    //构建对象
                    var obj = {
                        AssetName: data[0],
                        AssetCode: data[1],
                        LyDept: data[2],
                        UsePerson: data[3],
                        KeepAddr: data[4],
                        Unit: data[5],
                        Price: data[6],
                        TotalQty: data[7], 
                        TotalAmount: data[8],
                        Note: data[9]
                    };
                    list.push(obj);
                }
                return list;
            };
登入後複製

更多编程相关知识,请访问:编程入门!!

以上是淺談Bootstrap中如何直接輸入表格行資料(2)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:cnblogs.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!