jquery easyui DataGrid


Easyui Demo網站:

http://www.jeasyui.com/  英文

http://www.phptogether.com/juidoc/  中文

datagrip的基本屬性方法:http://www.phptogether.com/juidoc/datagrid.html

推薦:http://www.cnblogs.com/Philoo/tag/jQuery/

一、簡單示例

HTML

<table id="tbList" striped="true" rownumbers="true" fix="true" fitcolumns="true" title="標題"
       idfield="ID" checkbox="true" url="@Url.Action("ListData")">
    <thead>
        <tr>
            <th field="ID" checkbox="true" width="30">
            </th>
            <th field="Name" width="200" align="center">
                名稱
            </th> 
        </tr>
    </thead>
</table>

JS

$('#tbList').datagrid({ pagination: true });
$("#btnSearch").click(function () {//查詢方法
    $('#tbList').datagrid("unselectAll");
    $('#tbList').datagrid({ queryParams: { SearchName: $("#SearchName").val()} });
});

實現效果:

表格的列寬度自動撐開,使用復選框;

腳本添加了常見的查詢方法

二、基本用法

凍結列

$('#tbList').datagrid({ pagination: true,
            frozenColumns: [[
            { field: 'BId',checkbox:'true',width:30},
            { field: 'BNo', title: '牌號', width: 100 },
            { field: 'FNo', title: '班號', width: 100 }
          ]], 
       fitColumns:false //禁止自適應寬度、可以水平滾動
        });

去掉分頁

$('#tbList').datagrid({pagination: true});

更改為

$('#tbList').datagrid();

$('#tbList').datagrid({pagination: false});

注意:同時需要設置table的高度,而且不能為auto

復選框以及單選

<table id="tbList" style="height: 330px;" striped="true" rownumbers="true" fitColumns="true" title="" iconcls="icon-edit" 
checkbox="true" idfield="Id" url="@Url.Action("ListData")"> <thead> <tr>   <th field="Id" checkbox="true" width="150">   </th>
    </tr> </thead> </table>

變為單選(添加singleSelect="true"  )

<table id="tbList" style="height: 330px;" striped="true" rownumbers="true" fitColumns="true" title="" iconcls="icon-edit" singleSelect="true" checkbox="true"  idfield="Id" url="@Url.Action("ListData")">

加載數據后默認全選:

 $(document).ready(function () {
        $('#tbList').datagrid({ 
            onLoadSuccess: function (data) { $('#tbList').datagrid('selectAll'); } 
        });

獲取行數

$('#tbList').datagrid("getRows").length;

隱藏列

<th field="Dept" width="100" hidden="true">名稱</th>

清空原有數據

方法1:

  var item = $('#filegrid').datagrid('getRows');
            if (item) {
                for (var i = item.length - 1; i >= 0; i--) {
                    var index = $('#filegrid').datagrid('getRowIndex', item[i]);
                    $('#filegrid').datagrid('deleteRow', index);
                }
            }

方法2:(測試過)

$('#filegrid').datagrid('loadData', { total: 0, rows: [] });

解析:loadData:載入本地數據,舊記錄將被移除。

行點擊事件

 $('#tbList').datagrid({ onClickRow: function () {//代碼  } });

datagrip單擊行的時候,將單選按鈕設置為選中

<script type="text/javascript">
    var List = {};
    List.RadioFormatter = function (value, rec, index) {
        return "<input id='radio_id' name='radio_name' type='radio' value='" + rec.Id + "'/>";
    };

 $(document).ready( function(){ //呈現列表數據
  $('#tbList').datagrid({ onClickRow:
            function () {
                //單擊行的時候,將單選按鈕設置為選中
                var id = $('#tbList').datagrid("getSelected");
                $("input[name='name']").each(function () {
                    if ($(this).val() == id.Id) {
                        $(this).attr("checked", true);
                    }
                });
            }
        });
});
</script>
<table id="tbList" style="height: 300px;" striped="true" rownumbers="true" fitColumns="true" title="" iconcls="icon-edit"
         singleSelect="true" checkbox="true" idfield="Id" url="@Url.Action("ListData")">
            <thead>
                <tr>
                    <th field="Id" width="30" formatter="PickupList.RadioFormatter">
                    </th>
                </tr>
            </thead>
        </table>

單元格點擊

  單元格內容進行格式化化時,希望進行點擊進行操作,如何獲取到數據?

  方法1.先選中當前行,然后拿到本行的數據

  2.直接綁定數據

  方法1示例

  

//datagrid字段            
{ field: 'OrderNo', title: '單號', width: 100, halign: 'center', align: 'center', formatter: formatterStart },

//格式化單元格
var formatterStart = function (value, row, index) {
                return "<a href='#' data-index='" + index + "' onclick='startOnRow(this)'>" + row.OrderNo + "</a>";
            };

//點擊事件            
function startOnRow(e) {
    var rowindex = $(e).data("index");
    if (rowindex != -1) {
        $('#ui_datagrid').datagrid('selectRow', rowindex);
        startTake();
    }
}
//公用方法
function startTake() {
    var rows = $("#ui_datagrid").datagrid("getChecked");
    if (rows.length < 1) {
        $.msg_show("提示", "請先勾選訂單");
        return;
    }
   //自己的業務代碼
}

 

table中td的時間格式問題

1.頁面

 <th field="Test" formatter="Common.TimeFormatter" width="50" ></th>

2.js

var Common = {
    //EasyUI用DataGrid用日期格式化
    TimeFormatter: function (value, rec, index) {
        if (value == undefined) {
            return "";
        }
        /*json格式時間轉js時間格式*/
        value = value.substr(1, value.length - 2);
        var obj = eval('(' + "{Date: new " + value + "}" + ')');
        var dateValue = obj["Date"];
        if (dateValue.getFullYear() < 1900) {
            return "";
        }
        var val = dateValue.format("yyyy-mm-dd HH:MM");//控制格式
        return val.substr(11, 5);
    }

};

table中td內容太長自動換行

 添加屬性 nowrap="false" 

   將nowrap: false這個屬性設置在table的屬性中,不要設置在字段的屬性中,字段可以設置寬度,這樣就可以做到當文字長度超過規定的寬度后自動換行了

行和復選框的分離

方法一:(1.3版本才能用)

checkOnSelect="false" selectOnCheck="false"

注意:當使用$("#tbList").datagrid("getSelections");時候,只有行被選中,才能取到該行。一般情況,選中行時候,行為黃色背景。

  eg.<table checkOnSelect="false"> </table>

var selected = $("#tbList").datagrid("getSelections");
        if (selected.length == 0) {
            alert("請選擇!");
            return;
        }

        var idString = "";
        $.each(selected, function (index, item) {
            idString += item.Id + ",";
        });

 方法二(1.3版本之前的解決方法)

var IsCheckFlag = true;
        $('#tbList').datagrid({
            pagination: true,
            onClickCell: function (rowIndex, field, value) { IsCheckFlag = false; }, onSelect: function (rowIndex, rowData) { if (!IsCheckFlag) { IsCheckFlag = true; $("#tbList").datagrid("unselectRow", rowIndex); } }, onUnselect: function (rowIndex, rowData) { if (!IsCheckFlag) { IsCheckFlag = true; $("#tbList").datagrid("selectRow", rowIndex); } }
        });

 設置數據列表的樣式

 $(document).ready(function () {
        //呈現列表數據
        $('#tbList').datagrid({ pagination: true,
            rowStyler: function(index,row){
                    if (row.ID< 10) {//那么數據的id字段小於10的,將顯示為灰色字體
                        return 'color:#999;';//和一般的樣式寫法一樣
                    }
                }
            });
    });

 條件查詢

復選框的bug:使用參數查詢時候,在查詢之前選中的選項 ,在查詢之后,使用getSelections方法去獲取,依舊存在該選項

解決方案:通過unselectAll在查詢之前清空復選框即可

$("#btnSearch").click(function () {
            $('#tbList').datagrid("unselectAll");
            $('#tbList').datagrid({ queryParams: { SearchName: $("#SearchName").val() } });
        });

查詢bug:使用參數查詢時候,在查詢之后,顯示的當前頁碼還是之前的 ,不會重置為1,還是之前頁碼;如果當前總頁數為比當前小,導致頁面顯示為空。比如,當前第三頁,加入時間查詢后,只有1頁數據,那么當前頁碼還是3,導致頁面顯示空白。

解決方案:設置pageNumber為 1

$("#btnSearch").click(function () {
            $('#tbList').datagrid("unselectAll");
            $('#tbList').datagrid({ pageNumber: 1,queryParams: { SearchName: $("#SearchName").val() } });
        });

 初始化不加載

 該方法實現來自:https://blog.csdn.net/goux_s/article/details/51340288

//一、初始化datagrid
$('#gridlistRanking').datagrid({
    method: "GET", 
    url: '',//必須設置為空 
    ......
});

//二、設置options動態從后台拉取數據
function loadData() {
    var options = $('#gridlistRanking').datagrid('options');
    options.url = '/api/getRanking';//設置URL
    options.queryParams = { selectAreaLoc: selectAreaLoc};
    $('#gridlistRanking').datagrid(options);
}

自定義工具欄

方法一、使用div自定義(推薦)

查詢輸入框,回車查詢

//一、初始化datagrid
$('#ui_datagrid').datagrid({ 
    toolbar: "#dgToolbar",//DIV id
    ......
});
//二、頁面
<div id="dgToolbar">
    <input type="text" id="txtSearch" class="easyui-validatebox textbox" placeholder="輸入名稱" style="width: 300px; height: 22px; padding-left: 5px;" />
</div>
<table id="ui_datagrid" data-options="fit:true,border:false"></table>

 方法二、內部定義

$('#ui_datagrid').datagrid({ 
    toolbar:  [{
        text:'刪除',
        iconCls: 'icon-remove',
        handler: function(){
            //業務代碼
            //delete();
        }
    }],  
});

 

 

 三、行數據的增刪改

HTML(不分頁列表)

<table id="tbProductList" style="height: 500px; max-height: 500px;" fix="true" fitcolumns="true" idfield="ID" url="@Url.Action("ListData")"></table>

JS

$(document).ready(function () { 
        var datagrid;
        var editRow = undefined;
        datagrid = $("#tbList").datagrid({
            border: true,
            checkbox: true,
            iconCls: 'icon-save', //圖標
            nowap: true, //列內容多時自動折至第二行
            pagination: false,
            rownumbers: true,
            striped: true, //行背景交換
            columns: [[//顯示的列
             { field: 'ID', title: '編號', width: 100, align: 'center', sortable: true, checkbox: true },
             { field: 'Name', title: '名稱', width: 100, sortable: true },
              {
                  field: 'PriceType', title: '類型', width: 100, align: 'center',
                  formatter: function (value, row) { return row.TypeName; },
                  editor: {
                      type: 'combobox', options: {
                          valueField: 'Value',
                          textField: 'Text',
                          method: 'get',
                          url: $("#TypeUrl").val(),
                          required: true
                      }
                  }
              },
               {
                   field: 'Price', title: '價格', width: 100, align: 'center',
                   editor: {
                       type: 'numberbox', options: {
                           required: true,
                           min: 0,
                           precision: 2
                       }
                   }
               },
               {
                   field: 'Count', title: '數量', width: 100, align: 'center',
                   editor: {
                       type: 'numberbox', options: {
                           required: true,
                           min: 0,
                           precision: 0
                       }
                   }
               }
            ]],
            queryParams: { action: 'query' }, //查詢參數
            toolbar: [{ text: '添加', iconCls: 'icon-add', handler: function () {//添加列表的操作按鈕添加,修改,刪除等
                    //添加時先判斷是否有開啟編輯的行,如果有則把開戶編輯的那行結束編輯
                    if (editRow != undefined) {
                        datagrid.datagrid("endEdit", editRow);
                    }
                    //添加時如果沒有正在編輯的行,則在datagrid的第一行插入一行
                    if (editRow == undefined) {
                        datagrid.datagrid("insertRow", {
                            index: 0, // index start with 0
                            row: {

                            }
                        });
                        //將新插入的那一行開戶編輯狀態
                        datagrid.datagrid("beginEdit", 0);
                        //給當前編輯的行賦值
                        editRow = 0;
                    }

                }
                }, '-',
             {
                 text: '刪除', iconCls: 'icon-remove', handler: function () {
                     //刪除時先獲取選擇行
                     var rows = datagrid.datagrid("getSelections");
                     //選擇要刪除的行
                     if (rows.length > 0) {
                         $.messager.confirm("提示", "你確定要刪除嗎?", function (r) {
                             if (r) {
                                 var ids = [];
                                 for (var i = 0; i < rows.length; i++) {
                                     ids.push(rows[i].ID);
                                 } 
                                 //將選擇到的行存入數組並用,分隔轉換成字符串
                                 if ($.trim(ids) != "") {
                                    //---- Delete(ids.join(','));//這是post
                                 } else {
                                     alert("請選擇要刪除的信息!");
                                 }
                             }
                         });
                     }
                     else {
                         $.messager.alert("提示", "請選擇要刪除的行", "error");
                     }
                 }
             }, '-',
             {
                 text: '修改', iconCls: 'icon-edit', handler: function () {
                     //修改時要獲取選擇到的行
                     var rows = datagrid.datagrid("getSelections");
                     //如果只選擇了一行則可以進行修改,否則不操作
                     if (rows.length == 1) {
                         //修改之前先關閉已經開啟的編輯行,當調用endEdit該方法時會觸發onAfterEdit事件
                         if (editRow != undefined) {
                             datagrid.datagrid("endEdit", editRow);
                         }
                         //當無編輯行時
                         if (editRow == undefined) {
                             //獲取到當前選擇行的下標
                             var index = datagrid.datagrid("getRowIndex", rows[0]);
                             //開啟編輯
                             datagrid.datagrid("beginEdit", index);
                             //把當前開啟編輯的行賦值給全局變量editRow
                             editRow = index;
                             //當開啟了當前選擇行的編輯狀態之后,
                             //應該取消當前列表的所有選擇行,要不然雙擊之后無法再選擇其他行進行編輯
                             datagrid.datagrid("unselectAll");
                         }
                     }
                 }
             }, '-',
             {
                 text: '保存', iconCls: 'icon-save', handler: function () {
                     //保存時結束當前編輯的行,自動觸發onAfterEdit事件如果要與后台交互可將數據通過Ajax提交后台
                     datagrid.datagrid("endEdit", editRow);
                 }
             }, '-',
             {
                 text: '取消編輯', iconCls: 'icon-redo', handler: function () {
                     //取消當前編輯行把當前編輯行罷undefined回滾改變的數據,取消選擇的行
                     editRow = undefined;
                     datagrid.datagrid("rejectChanges");
                     datagrid.datagrid("unselectAll");
                 }
             }, '-'],
            onAfterEdit: function (rowIndex, rowData, changes) {
                //endEdit該方法觸發此事件
                //console.info(rowData);
                //---- Update(ids.join(','));//這是post
                editRow = undefined;
            },
            onDblClickRow: function (rowIndex, rowData) {
                //雙擊開啟編輯行
                if (editRow != undefined) {
                    datagrid.datagrid("endEdit", editRow);
                }
                if (editRow == undefined) {
                    datagrid.datagrid("beginEdit", rowIndex);
                    editRow = rowIndex;
                }
            }
        });
    });


 

 

 相關文章推薦:

Easyui datagrid行內【添加】、【編輯】、【上移】、【下移】

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM