EasyUI DataGrid 結合Java 各種技巧大綜合,你值得擁有。


singleSelect : true

 

這兩天,一直被datagrid折磨着,不過今天基本結束了,我准備把這幾天碰到的問題和解決方法總結一下,歡迎指正。環境:jquery-easyui-1.3.2版本。

DataGrid 生成

從后台傳過來直接生成datagrid

jsp代碼:

<table  id="items" ></table>

說明:只需要定義一個table,給他一個id就OK。

js代碼:

$('#items').datagrid({    
            url:"dataList.do",//加載的URL  
            title:"商品信息",
            singleSelect:true,
            columns:[[
                  {
                    field:'snackid',title:'商品id',align:'center',sortable:true,
                   formatter:function(value,row,index){
               return row.snackid; }
                  }
             });        

說明:url是指從后台接收的json數據,columns里面是數據展示,formatter是規范數據的,決定數據以何種形式呈現,row代表的是后台傳過來的rows的單條數據,針對datagrid,官方文檔是這樣說的。

 

tips:若你想從后台傳入一個不在json數據里的數據,那你需要自己在后台定義一個key-value,類似下面:

Map<String,Object> jsonMap = new HashMap<String,Object>();
jsonMap.put("total",page.getPager().getRowCount());
jsonMap.put("kk", 111);
jsonMap.put("rows", dataList);

然后在前端你只需像下面這樣寫就行:

formatter:function(value,row,index){
           var d = $(this).datagrid("getData");
       return d.kk;
}            

 

將table 直接渲染成datagrid

如果你想直接將table數據直接渲染成datagrid,那請參考官方文檔:http://www.jeasyui.com/tutorial/datagrid/datagrid1.php

如果你想先渲染后賦值的話,就可以使用下面的方法

html代碼

<table id="item">
    <thead>
        <tr>
            <th data-options="field:'snackid',width:25,align:'center'">商品id</th>
            <th data-options="field:'snackname',width:25,align:'center'">商品名稱</th>
            <th data-options="field:'snackprice',width:25,align:'center'">商品單價</th>
            <th data-options="field:'salenum',width:25,align:'center',editor:{type:'numberbox'}}">商品數量</th>
            <th data-options="field:'saleprice',width:25,align:'center'">金額</th>
        </tr>
    </thead> 
                                        
</table>

js代碼

 $("#item").datagrid({fitColumns:true,onClickCell: onClickCell});

說明:給每行添加onClickCell事件。

基礎操作

操作一:單元格聯動

單元格聯動指的是某一行的單元格內容發生改變,這一行的另一個單元格也要做出相應改變。例如,商品數量發生改變,商品金額應該也相應發生改變。

技術要點:首先讓某個單元格變成可編輯模式,使用editor,具體代碼見上面,然后在editor里面添加events,單元格編輯完成后,鍵入enter鍵,修改另一個單元格的文本。

js代碼:

function onClickCell(index, field) {

        $('#item').datagrid('selectRow', index).datagrid('beginEdit', index);
        var ed = $('#item').datagrid('getEditor', {
            index : index,
            field : field
        });
        if (ed) {
            ($(ed.target).data('textbox') ? $(ed.target).textbox('textbox')
                    : $(ed.target)).focus();
        }
        var ed = $('#item').datagrid('getEditors', index);
        for (var i = 0; i < ed.length; i++) {
            var e = ed[i];
            $(e.target).bind('keyup',function() {
                //enter鍵的keyCode是13
                if (window.event.keyCode == 13) {
                    //修改數據
                      var columns = $('#item').datagrid("options").columns;
                      var rows = $('#item').datagrid("getRows");
                      $('#item').datagrid('endEdit', index);
                      rows[index][columns[0][4].field] = rows[index][columns[0][2].field]* rows[index][columns[0][3].field];
                      $('#item').datagrid('refreshRow', index);

                }
            });
        }
    }

 

說明:寫在onClickCell事件里面,代碼寫的很清楚,自己琢磨,我就不解釋了。kk

操作二:動態添加行

說明:點擊按鈕后,動態給某個datagrid添加一行數據。

例子:將一個datagrid(A)的某一行的某一些數據轉到另一個datagrid(B)。

步驟:

1.在A中添加:

 

singleSelect : true,

 

2.給buttton事件一個onclick事件:

<a class="easyui-linkbutton" onclick="getSelected()">選擇</a>

 

 

3.實現onclick事件

function getSelected() {
        var rows = $('#A').datagrid('getSelections');
        // $("#item").datagrid({fitColumns:true});
        for (var i = 0; i <= rows.length - 1; i++) {
            $('#B').datagrid('insertRow', {
                index : i,
                row : {
                    "snackid" : rows[i].id,
                    "snackname" : rows[i].snackname,
                    "snackprice" : rows[i].snackprice,
                    "salenum" : 1,
                    "saleprice" : rows[i].snackprice * 1,
                }
            });
        }

    }

 

 說明:使用getSelections獲得選中行,然后使用insertRow插入新的行。

 

 

操作三:動態刪除行

說明:刪除datagrid(A)的選中行

步驟:

1.在A中添加:

 

singleSelect : true,

 

 

2.給buttton事件一個onclick事件:

<a class="easyui-linkbutton" onclick="deleteSelected()">刪除</a>

 

 

 

3.實現onclick事件

function deletesnack() {
        var rows = $('#A').datagrid("getSelections");
        for (var i = rows.length - 1; i >= 0; i--) {
            var index = $('#A').datagrid('getRowIndex', rows[i]);
            $('#A').datagrid('deleteRow', index);
        }
    }

 

 

操作四:根據某個字段篩選datagrid

說明:根據某個字段重載datagrid

步驟:

1.添加textbox和button

<label style="color: #fff;">名稱</label> 

<input id="snackname" class="easyui-textbox" label="Search:" labelPosition="left">&nbsp;

<a class="easyui-linkbutton" onclick="searchbysnackname()">&nbsp;&nbsp;</a>

 

2.實現onclick事件

function searchbysnackname() {
            var snackname = $("#snackname").val();
            if (snackname == "") {
                alert('請輸入名稱');
            } else {
                $('#A').datagrid('reload', {
                    snackname : snackname
                });
            }
        }

 

說明:主要要使用reload 

操作五:提交到后台

說明:將json數據提交到后台

步驟:

1.添加button

<a class="easyui-linkbutton" onclick="submit()">&nbsp;&nbsp;</a>

 

2.添加onclick事件

function submit() {
            var roomid = $("#roomid").val();
            var rows = $('#item').datagrid('getRows');
            alert(rows);
            $.messager.confirm('確認', '確定要提交所有的數據?', function(r) {
                if (r) {
                    $.ajax({
                        type : "post",
                        url : 'saveBill.do',
                        data : {
                            json : JSON.stringify(rows),
                            roomid : roomid
                        },
                        dataType : "JSON",
                        success : function(data, textStatus) {
                            if (data.resultCode == 1) {
                                showRightBottomMsg("系統提示", "提交成功!", 'slide',
                                        5000);
                                clearDatagridAndTree();
                            } else {
                                if (data.errorType == "user") {
                                    showAlertMsg("提示", data.msg, "warning");
                                } else {
                                    showRightBottomMsg("系統提示", data.msg,
                                            'slide', 5000);
                                }
                            }
                        },
                        error : function(XMLHttpRequest, textStatus,
                                errorThrown) {
                            alert(textStatus + errorThrown);
                        }
                    });
                }
            });
}

 

就這樣吧,手都寫酸了,記得點贊。

 


免責聲明!

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



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