在Asp.Net中使用JQueryEasyUI

最近做一個小工具,列表顯示頁面準備使用JQuery的UI框架,因爲之前知道有jQWidgets這個框架,所以直接就下載下來使用了,jQWidgets的功能很強大,Demo和文檔也非常詳細,但使用後發現有幾個問題就果斷放棄了使用jQWidgets:

  • 頁面加載速度比較慢;
  • 當列表字段過多出現橫向滾動條時,拖動滾動條非常卡(在IE下都很卡,Chrome好點);
  • 分頁取數稍顯麻煩,也可能是我沒研究透。

經過一番比較選擇了JQueryEasUI,目前最新版本爲1.3.1:

其實是用類似的框架,看看官網的文檔也就OK了,本文是我最近是用JQueryEasyUI的一個總結,也可以讓初使用JQueryEasyUI的朋友少走彎路。

下載引用

下載後解壓的文件目錄如下圖:

  • demo:JQueryEasyUI的一些示例頁面,在項目使用可以將該目錄刪除;
  • locale:該目錄中是一些本地化文件,用來支持不同的語言,如中文可以引用其中的easyui-lang-zh_CN.js;
  • plugins和src:這兩個目錄中是支持JQueryEasyUI各種功能的js文件;
  • themes:主題目錄,目錄中有三種主題,default、gray和metro,另外還有一個icons目錄和icon.css,在頁面使用引用icon.css即可。

使用JQueryEasyUI需要引用四個文件,兩個css和兩個js文件:

<link rel="stylesheet" type="text/css" href="../Scripts/jqueryeasyui/themes/gray/easyui.css" />
<link rel="stylesheet" type="text/css" href="../Scripts/jqueryeasyui/themes/icon.css" />
<script type="text/javascript" src="../Scripts/jqueryeasyui/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="../Scripts/jqueryeasyui/jquery.easyui.min.js"></script>

如果需要使用本地化 還需要引用:

<script type="text/javascript" src="../Scripts/jqueryeasyui/locale/easyui-lang-zh_CN.js"></script>

JQueryEasyUI Grid的分頁

根據官網的文檔可以很容易的構建Grid,期初我沒有引用本地化文件easyui-lang-zh_CN.js,列表的分頁欄顯示出來是英文的,在網上查閱後得知可以用代碼的方式重新構建分頁欄:

//設置分頁控件  var p = $('#dg').datagrid('getPager');
$(p).pagination({
    pageSize: 10, //每頁顯示的記錄條數,默認爲10  pageList: [10, 20, 30, 40, 50], //可以設置每頁記錄條數的列表  beforePageText: '第', //頁數文本框前顯示的漢字 
    afterPageText: '頁    共 {pages} 頁',
    displayMsg: '當前顯示 {from} - {to} 條記錄 共 {total} 條記錄'
    /*onBeforeRefresh:function(){              $(this).pagination('loading');              alert('before refresh');              $(this).pagination('loaded');          }*/
}); 

後來發現只需要引用本地化文件easyui-lang-zh_CN.js後分頁欄就自動顯示爲中文了。引用本地化文件還可以解決日曆控件格式的問題,所以如果是做中文系統建議還是在頁面中引用本地化文件。

JQueryEasyUI控件的取值

使用JQuery取控件的值很簡單,如下:

$("#CstName").val();
$("#TaskNo").val(),

如果要使用JQueryEasyUI的日曆控件、下拉控件或其他的一些控件,給普通的input、select控件添加一個class即可:

<input id="FeedBackDate" name="FeedBackDate" class="easyui-datebox" maxlength="10"
 style="width: 150px;" />
<select id="IsKfCl" class="easyui-combobox" name="IsKfCl" style="width:150px;"> 
    <option value=""></option>   
    <option value="是"></option>  
    <option value="否"></option>  
</select> 
現在取這些控件的值需要使用下面的方法:
$("#FeedBackDate").datebox("getValue");
$("#IsKfCl").combobox("getValue");

Grid ToolBar的兩種方式

通常在Grid列表控件的上方會添加一些按鈕如:新增、編輯、刪除等,如下面效果:

在JQueryEasyUI中可以使用ToolBar來實現,ToolBar可以在DataGrid初始化時定義,如下:

$('#dg').datagrid({
    collapsible: false,
    fitColumns: true,
    singleSelect: true,
    remoteSort: false,
    sortName: 'RoleName',
    sortOrder: 'desc',
    nowrap: true,
    method: 'get',
    loadMsg: '正在加載數據...',
    url: '...',
    frozenColumns: [[
        { field: 'ck', checkbox: true }
    ]],
    columns: [[
        { field: 'ID', title: 'ID', width: 80, sortable: true },
        { field: 'Name', title: '名稱', width: 100,sortable:true }
    ]],
    pagination: true,
    pageNumber: 1,
    rownumbers: true,
    toolbar:
    [
        {
            id: 'btnAdd',
            text: '添加',
            iconCls: 'icon-add',
            handler: function() {
                $("#name").val("");
                add();
            }
        },
        '-',
        {
            id: 'btnEdit',
            text: '編輯',
            iconCls: 'icon-edit',
            handler: function() {
                var selected = $('#dg').datagrid('getSelected');
                if (selected) {
                    var name = selected.Name;
                    $("#Name").val(name);
                    edit();
                }
            }
        },
        '-',
        {
            id: 'btnDelete',
            text: '刪除',
            disabled: true,
            iconCls: 'icon-remove',
            handler: function() {
            }
        }
    ]
});
        });

還有一種方法就是將ToolBar單獨定義在div中,然後在DataGrid的初始化時關聯div的ID,首先定義ToolBar的div,ID爲tb:

<!--工具欄-->
<div id="tb" style="padding: 5px; height: auto;display:none;">
    <div style="margin-bottom: 5px">
        <a href="#" class="easyui-linkbutton" iconcls="icon-add" onclick="add()">新增</a>
        <a href="#" class="easyui-linkbutton" iconcls="icon-edit" onclick="edit()">編輯-</a>
        <a href="#" class="easyui-linkbutton" iconcls="icon-edit" onclick="copyAdd()">拷貝′</a>
        <a href="#" class="easyui-linkbutton" iconcls="icon-cut" onclick="copyVss()">複製地址·</a>
        <a href="#" class="easyui-linkbutton" iconcls="icon-save" onclick="downReg()">下載REG</a>
        <a href="#" class="easyui-linkbutton" iconcls="icon-remove" onclick="del()">刪除y</a>
        <!--查詢區域-->
        區域:<input id="seaArea" style="width: 100px" />
        客戶名稱:<input id="seaCstName" style="width: 100px" />
        <a href="#" class="easyui-linkbutton" iconcls="icon-search" onclick="searchSrcCode()">查詢</a>
    </div>
</div>

在DataGrid的初始化時設置toobar屬性值爲tb:

pagination: true,
pageNumber: 1,
rownumbers: true,
toolbar: '#tb',
...

單獨定義ToolBar個人認爲要靈活些,也會讓JS代碼簡潔些。

Form表單的提交

上面說過了列表的顯示,下面就來講下數據的提交,有兩種方式可以實現:

  • 自己組織數據然後用Ajax(GET POST)提交;
  • 使用Form表單提交的方式。

我在剛使用的時候是使用的第一種方法:

//保存
function saveFeedBackLog(mode,id) {
    $.ajax({
        type: "POST",
        dataType: "json",
        //cache:true,
        url: "../Ajax/FeedBackLogAjax.ashx?Method=SaveFeedBackLog",
        data: { FeedBackDate: $("#FeedBackDate").datebox("getValue"),
            CstName: $("#CstName").val(),
            TaskNo: $("#TaskNo").val(),
            FeedBackContent: $("#FeedBackContent").val(),
            CsZrr: $("#CsZrr").combobox("getValue"),
            CsYzResult: $("#CsYzResult").val(),
            IsKfCl: ,
            KfZrr: $("#KfZrr").combobox("getValue"),
            EndDate: $("#EndDate").datebox("getValue"),
            KfClDate: $("#KfClDate").val(),
            Wtyy: $("#Wtyy").val(),
            Mode:mode,
            ID:id
        },

        success: function (data) {
        //..........

當頁面字段比較多的時候會比較麻煩,保存時需要將每個字段的值逐一取出傳送到後臺,編輯時也需要將行中各字段的值逐一取出賦給表單中的控件,後來發現JQueryEasyUI提供Form的Ajax提交的方式,會使代碼精簡很多,而且使用Form表單提交的方式還能用到JQueryEasyUI提供的一些驗證控件。

編輯時賦值給表單

function edit() {
    var rowData = $('#dg').datagrid('getSelections');
    if (rowData.length == 0) {
        $.messager.alert('提示', '請選擇要編輯的項!','info');
    }
    else if (rowData.length > 1) {
        $.messager.alert('提示', '只能選擇一項進行編輯!','info');
    }
    else {
        _mode = "2";
        var row = $('#dg').datagrid('getSelected');
        openDialog();
        $('#fm').form('load', row);
        _srcCodeManageID = row.SrcCodeManageID;
        url = "../Ajax/SrcCodeManageAjax.ashx?Method=SaveSrcCodeManage&ID=" + row.SrcCodeManageID+"&Mode="+_mode;
    }
}

保存

//保存
function saveSrc() {
    $('#fm').form('submit', {
        url: url,
        onSubmit: function () {
            return $(this).form('validate');
        },
        success: function (data) {
            if (data =="Success") {
                $('#dlg').dialog('close');      // close the dialog  
                $('#dg').datagrid('reload');    // reload the user data  
                $.messager.alert('提示', '保存成功!', 'info');
            }
            else if (data=="Error")
            {
                $.messager.alert('錯誤', '系統出錯!', 'error');
            }
        }
    });  
}

可以看出第二種方法相比第一種代碼精簡了很多,而且保存時還能用到表單的一些校驗,比如設置必填項、電話、郵件格式等。

當然JQueryEasyUI還有很多其他的控件和功能,有待以後慢慢研究,希望本文對你有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章