[ASP.NET] 於ASP.NET使用 jQuery EasyUi DataGrid 存取資料

摘要:[ASP.NET] 於ASP.NET使用 jQuery EasyUi DataGrid 存取資料

前言


  最近逛了逛 jQuery 資料又發現了一個新的 UI 可以使用,就是 jQuery EasyUI,沒注意到是甚麼時候出現的,之前印象只有jquery ui跟jquery tools,看了一下他的文件內容跟Demo資料,其實也提供蠻多好用的plugin,其中覺得他的datagrid感覺還不錯,順手寫了一個範例記錄一下。

jQuery EasyUi 網址: http://www.jeasyui.com

jQuery EasyUi 中文文件: http://www.phptogether.com/juidoc/

 

範例


Step 1

  首先要去 jQuery EasyUi 網站下載檔案,最新版本為 jQuery EasyUI 1.2.5 

 

Step 2

  建立新網站,加入jquery及easyui套件

 

Step 3

  建立一頁新aspx網頁及ashx泛型處理常式用來處理ajax需求,將js檔案載入aspx頁面,依序是css, jquery.js, easyui.js

  • jquery.easyui.min.js為包含所有plugin,當然也可以單獨載入要使用的plugin檔案,
  • 如果需要使用繁體語系,可以在所有.js檔最後面載入 locale 資料夾內的 easyui-lang-zh_TW.js 檔案。
  • 因官網下載的datagrid有如果在page中將datagrid放在form標籤中,選擇跳頁會post的問題,所以這邊需要重新載入原作者提供給我的修正檔pagination plugin。

 

Step 4

  依照官網範例其實就可以很簡單的建立起基本雛型,這邊也一樣實際做一下,針對DataGrid easyui是使用<table>標籤,所以在body內加入一個table並且設定一下表頭欄位,表頭欄位也可以在 script 內的 columns properties設定 ,dgl 的 div 是為了使用 Dialog 來做新增資料的介面。

 

Step 5 

  接下來就開始撰寫 Java Script 碼,基本用法如下:

$('#grid').datagrid({   
    url:'CRUDHandler.ashx',  //處理資料面程式   
    columns:[[   //設定欄位
        {field:'id',title:'ID',width:100},   
        {field:'name',title:'Name',width:100},   
        {field:'age',title:'Age',width:100,align:'right'},
        {field:'address',title:'Address',width:100}
    ]]   
});

  這使用尚有很多種屬性可以設定,這些屬性在官方文檔內都可以找的到,在這邊我輸入的Script如下:

        $(function () {
            var qParams = { id: $("#txtid").val(), name: $("#txtname").val() }; //取得查詢參數
            var oldRowIndex;
            var opt = $('#grid');
            opt.datagrid({
                width: "auto", //自動寬度
                height: 320,  //固定高度
                nowrap: false, //不截斷內文
                striped: true,  //列背景切換
                fitColumns: true,  //自動適應欄寬
                singleSelect: true,  //單選列
                queryParams: qParams,  //參數
                url: 'CRUDHandler.ashx',  //資料處理頁
                idField: 'id',  //主索引
                frozenColumns: [[{ field: 'ck', checkbox: true}]], //顯示核取方塊
                pageList: [10, 15, 20], //每頁顯示筆數清單
                pagination: true, //是否啟用分頁
                rownumbers: true, //是否顯示列數
                toolbar: [{
                    id: 'btnAdd',
                    text: '新增',
                    iconCls: 'icon-add',
                    handler: function () {
                        insertRow($(this));
                    }
                }],
                onClickRow: function (rowIndex) {
                    if (oldRowIndex == rowIndex) {
                        opt.datagrid('clearSelections', oldRowIndex);
                    }
                    var selectRow = opt.datagrid('getSelected');
                    oldRowIndex = opt.datagrid('getRowIndex', selectRow);
                }
            }).datagrid("getPager").pagination({
                buttons: [{
                    id: 'btnEdit',
                    iconCls: 'icon-edit',
                    text: '編輯',
                    handler: function () {
                        editRow();
                    }
                }, '-', {
                    id: 'btnDel',
                    text: '刪除',
                    iconCls: 'icon-remove',
                    handler: function () {
                        removeRow();
                    }
                }],
                onBeforeRefresh: function () {
                    return true;
                }
            });
            $("#btnQry").click(function(){
                    Query();
            });
        });

 

  以上這段為主體的Script,這個DataGrid可以處理 查詢、新增、更新、刪除,傳輸資料的格式主要為JSON,接下來必須將對應的方法都補上,開啟新增畫面方法:

        //開啟新增並位移
        function insertRow(opt) {
            var offset = opt.offset();
            $('#dlg').dialog('open').dialog('setTitle', '新增資料').dialog('move', {
                left: offset.left,
                top: offset.top
            });
        }

 

  儲存資料方法:

        //儲存資料
        function saveData() {
            if ($(".easyui-validatebox").val() != "") {
                $.post('CRUDHandler.ashx', 'mode=INS&' + $('#frmAjax input').serialize(), function (result) {
                    if (result.success) {
                        $('#dlg').dialog('close');
                        $.messager.alert('Success', '新增成功!', 'info', function () {
                            $('#grid').datagrid('reload'); // reload
                        });
                    } else {
                        $.messager.alert('Error', result.msg, 'warning');   //錯誤訊息
                    }
                }, 'json');
            }
            else
                $.messager.alert('警告', '未輸入ID!', 'warning');   //錯誤訊息
        }

 

  編輯資料列方法(這邊使用直接跳頁至Detail頁面處理:

        //編輯資料列
        function editRow() {
            var row = $("#grid").datagrid('getSelected');
            if (row != null)
                window.location.href = "Detail.aspx?mode=UPD&pk=" + row.id;
            else
                $.messager.alert('訊息', '尚未選擇需編輯的資料列!', 'info');   //
        }

 

  刪除資料列方法:

        //刪除資料列
        function removeRow() {
            var row = $("#grid").datagrid('getSelected');
            if (row) {
                $.messager.confirm('Confirm', '確定要刪除此筆資料?', function (r) {
                    if (r) {
                        var index = $("#grid").datagrid('getRowIndex', row);
                        //$('#grid').datagrid('deleteRow', index); //取得index
                        $.post('CRUDHandler.ashx', { 'mode': 'DEL', id: row.id }, function (result) {
                            if (result.success) {
                                $.messager.alert('Success', '刪除成功!', 'info', function () {
                                    $('#grid').datagrid('reload');  //刷新畫面
                                });
                            } else {
                                $.messager.alert('Error', result.msg, 'warning');   //錯誤訊息
                            }
                        }, 'json');
                    }
                });

            }
            else
                $.messager.alert('訊息', '尚未選擇需刪除的資料列!', 'info');   //
        }

 

  查詢方法:

        function Query() {
            var qid, qname;
            if ($("#txtid").val() != "")
                qid = $("#txtid").val();
            else
                qid = "";
            if ($("#txtname").val() != "")
                qname = $("#txtname").val();
            else
                qname = "";

            qParams = { id: qid, name: qname };
            $('#grid').datagrid('options').queryParams = qParams;
            $('#grid').datagrid('options').pageNumber = 1;
            var p = $('#grid').datagrid('getPager');
            if (p) {
                $(p).pagination({ pageNumber: 1 });
            }
            $("#grid").datagrid('reload');
            return false;
        }    

 

  以上aspx頁面的Script就差不多完成了,接下來就要處理資料面的問題,我使用了 CRUDHandler.ashx 這隻泛型處理常式來處理Server端的動作,在ashx開始我會先判斷要處理哪種作業,並且執行哪個method。

    public void ProcessRequest (HttpContext context) {
        if (context.Request["mode"] != null)
        {
            string mode =  context.Request["mode"].ToString();
            switch(mode)
            {
                case "Qry":
                    QueryData(context);
                    break;
                case "INS":
                    InsertData(context);
                    break;
                case "DEL":
                    DeleteData(context);
                    break;
            }
        }
    }

 

  在查詢的部分我使用SQL資料分頁的方式取得資料並回傳Client端,DataGrid 預設會POST兩個參數回Server端。

  • page: 目前頁數
  • rows: 顯示的筆數

 

  在Server端必須接收這兩個參數後再去資料庫取得分頁資料,如果需要增加額外的參數就如同我上面的Script碼寫法增加,一個查詢的程式碼大概如下:

    //查詢資料
    public void QueryData(HttpContext context)
    {
        //資料庫分頁取得資料方法
        string page = context.Request["page"];
        string rows = context.Request["rows"];
        List li = new List();
        DataSet ds = GetData(int.Parse(rows), int.Parse(page), context);
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            li.Add(new users()
            {
                id = dr["id"].ToString(),
                name = dr["name"].ToString(),
                age = dr["age"].ToString(),
                address = dr["address"].ToString()
            });
        }
        ReturnDate rd = new ReturnDate();
        rd.total = ds.Tables[1].Rows[0]["TotalCount"].ToString();
        rd.rows = li;
        DataContractJsonSerializer json = new DataContractJsonSerializer(rd.GetType());
        json.WriteObject(context.Response.OutputStream, rd);
    }

    public class ReturnDate
    {
        public string total { get; set; }
        public List rows { get; set; }
    }

    public class users
    {
        public string id { get; set; }
        public string name { get; set; }
        public string age { get; set; }
        public string address { get; set; }
    }

  這是我的寫法,將撈出來的資料轉成JSON後在傳到Client,而其他的處理方法就可以依照你自己需求而去撰寫,我這邊就不多撰寫了,這樣就完成了一個DataGrid,實際完成的畫面如下。

 

 

範例程式碼


jQueryEasyUiDataGrid.rar

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)