• EasyUI Datagrid数据网格


    1 创建datagrid
    1>在table中创建
    第一种:

     1 <table class="easyui-datagrid">
     2     <thead>
     3         <tr>
     4             <th data-options="field:'code'">Code</th>
     5             <th data-options="field:'name'">Name</th>
     6             <th data-options="field:'price'">Price</th>
     7         </tr>
     8     </thead>
     9     <tbody>
    10         <tr>
    11             <td>001</td><td>name1</td><td>2323</td>
    12         </tr>
    13         <tr>
    14             <td>002</td><td>name2</td><td>4612</td>
    15         </tr>
    16     </tbody>
    17 </table>

    这种实现效果为

    表格内容为自己手动输入的内容。
    第二种:

    <table class="easyui-datagrid" style="400px;height:250px"
        data-options="url:'datagrid_data.json',fitColumns:true,singleSelect:true">
        <thead>
            <tr>
                <th data-options="field:'code',100">Code</th>
                <th data-options="field:'name',100">Name</th>
                <th data-options="field:'price',100,align:'right'">Price</th>
            </tr>
        </thead>
    </table>

    这种实现效果为

     其中表格内容为属性data -options中url所指向的数据。
    2>在javascript中创建表格
    首先在前台页面中创建一个table,用来放datagrid.

    <table id="dg"></table>

    接着在js中

    1 $('#dg').datagrid({
    2     url:'datagrid_data.json',
    3     columns:[[
    4         {field:'code',title:'Code',100},
    5         {field:'name',title:'Name',100},
    6         {field:'price',title:'Price',100,align:'right'}
    7     ]]
    8 });

    在第2行url里面引用的就是数据源。

    2 Datagrid 属性
    1>columns  类型为array  默认值为undefined
    赋值

    在以往的工作中,遇到过两种情况

    a 直接给出,数据为一个json字符串,换言之就是列标题是死的


    b columns的值需要自动创建的,换言之列标题是随返回结果而变化的

    创建的方法如下

     1 function createColumns(data){
     2     var dataLength = data.length;
     3     var column = [];
     4     var columns = [];
     5     if(dataLength>0){
     6         var title="";
     7         var jsonObj = data[0];
     8         for(var key in jsonObj){
     9             title=key;
    10             if(key.indexOf("质控码_")>-1){
    11                 title = "质控码";
    12             }
    13             var columnObj = {field:key,title:title,100, align:'center'};
    14             column.push(columnObj);
    15             if(title.indexOf("日数")>-1){
    16                 columnObj = {field:" ",title:'操作',100,
    17                     formatter: function(value,row,index){
    18                         return '<a href="javascript:void(0)" onclick="window_detail('+index+');">详情</a>';
    19                     }
    20                 }
    21                 column.push(columnObj);
    22             }
    23         }
    24     }
    25     columns.push(column);
    26     return columns;


    其中返回的数据格式为

    loadResult({"total":42,"rows":[{"站号":"53596","站名":"顺平","雨量":"0","观测日期":"20171226","站点类型":"国家站"},{"站号":"54627","站名":"盐山","雨量":"0","观测日期":"20171226","站点类型":"国家站"},{"站号":"54604","站名":"安国","雨量":"0","观测日期":"20171226","站点类型":"国家站"},{"站号":"54615","站名":"青县","雨量":"0","观测日期":"20171226","站点类型":"国家站"}]})

    创建过程:

    备注:明确column类型为array
    colunms可以直接定义一个变量

    var arrCols=[
                     {field:'staNum',title:'站号',50},
                    {field:'staName',title:'站名',80,},
                    {field:'staAdd',title:'站址',325},
                    {field:'staYaoSu',title:name,95}
                ];
        
        if(yaosu.indexOf("SNOW")>-1){
            arrCols=[
                         {field:'staNum',title:'站号',50},
                        {field:'staName',title:'站名',80,},
                        {field:'staAdd',title:'站址',260},
                        {field:'staYaoSu',title:name,95},
                        {field:'staMark',title:"备注",50}
                        
                        ];
        }

     列属性
    title String 列的标题文本
    field String 列的字段名
    width number 列宽
    rowspan  指示一个单元格占据多少行。

    colspan 指示一个单元格占据多少列。
    align String  对齐方式 left,right,center

    sortable boolean true为允许被排序
    order String asc或者desc

    fixed boolean 设置为 true,则当 'fitColumns' 设置为 true 时放置调整宽度。
    hidden  设置为 true,则隐藏该列。

    formatter 类型为function 
    单元格的格式化函数,需要三个参数:
    value:字段的值。
    rowData:行的记录数据。
    rowIndex:行的索引。

    eg:

    {field:'title',title:'产品名称',300,
                                    formatter: function(value,row){
                                            var url=row.address;
                                            var src = "<a href='#' onclick=\"getDetail('"+url+"')\">"+value+"</a>";
                                            return '<img src="${pageContext.request.contextPath}/misp/observation/qixiangweixing/images/023.png" width="20px" height="19px" style="padding-right: 5px; padding-left: 5px;position:relative;top:3px;">'+src;
                                        }
                            
                                
                                    },

    sorter function 

    用于本地排序的自定义字段的排序函数,需要两个参数:
    a:第一个字段值。
    b:第二个字段值。

    $('#dg').datagrid({
        remoteSort: false,
        columns: [[
            {field:'date',title:'Date',80,sortable:true,align:'center',  
                sorter:function(a,b){  
                    a = a.split('/');  
                    b = b.split('/');  
                    if (a[2] == b[2]){  
                        if (a[0] == b[0]){  
                            return (a[1]>b[1]?1:-1);  
                        } else {  
                            return (a[0]>b[0]?1:-1);  
                        }  
                    } else {  
                        return (a[2]>b[2]?1:-1);  
                    }  
                }  
            }
        ]]
    });


    3>fitColumns 类型为布尔 默认值为false 2>frozenColumns  类型为array  默认值为undefined 同上columns,但是把在这个属性里面定义的列冻结在左侧

    作用:设置为 true,则会自动扩大或缩小列的尺寸以适应网格的宽度并且防止水平滚动。

    出现问题:当fitColumns为true但是失效时(数据列并没有自动填充满datagrid指定的宽度)的解决办法
    首先要明白当fitColumns设置为true时,会依据配置列width和datagrid的指定宽度来重新计算列的宽度。如果都没有指定,列宽取列标题宽度或者此列内容宽度最大值。即要想datagrid fitColumns:true生效,至少要为一列指定宽度。意思就是columns里面的所有列中必须至少有一列设置width等于多少。

    eg:

    var columnObj = {field:key,title:title,align:'center'};

    在fitColumns设置为true的前提下显示效果为

    修正后:

    var columnObj = {field:key,title:title,100, align:'center'};

    注意此处加上了width属性

    显示效果为

     4>toolbar 类型为array或者selector
    数据网格(datagrid)面板的头部工具栏。可能的值:

    a、数组,每个工具选项与链接按钮(linkbutton)一样。
    b、选择器,只是工具栏。
    在div标签里面定义工具栏

    <div id="dg_tb" >
                <a href="#" id="dt_export" class="easyui-linkbutton" iconCls="icon-save" plain="true">导出</a>
    </div>

    $('#dg').datagrid({
    	toolbar: '#dg_tb'
    });

    通过数组定义工具栏:

    $('#dg').datagrid({
        toolbar: [{
            iconCls: 'icon-edit',
            handler: function(){alert('edit')}
        },'-',{
            iconCls: 'icon-help',
            handler: function(){alert('help')}
        }]
    });

    项目中实例:

    5>method,url,rownumbers,queryParams

     1 $('#dg_fw').datagrid({
     2                             //method    类型string    请求远程数据的方法(method)类型。    默认值为post
     3                             method: 'get',
     4                             //url    类型string    从远程站点请求数据的 URL。
     5                             url: 'jiankongS.jsp',
     6                             fit: true,
     7                             fitColumns: true,
     8                             //rownumbers    类型boolean    设置为 true,则显示带有行号的列。 默认值为false
     9                             rownumbers:true,
    10                             pageNumber: 1,
    11                             columns:[[
    12                               {field: 'field', title: ' ',  100},
    13                               {field: 'value', title: ' ',  100},
    14                                       ]],
    15                             //queryParams    类型object 当请求远程数据时,发送的额外参数。
    16                             queryParams: {
    17                                 method: 'getJianKongFileDetail',
    18                                 type: encodeURI(_e.text())
    19                             },
    20                             //当请求远程数据时,发送的额外参数。 返回要显示的过滤数据。该函数有一个参数 'data' ,表示原始数据。您可以把原始数据变成标准数据格式。该函数必须返回标准数据对象,含有 'total' 和 'rows' 属性。
    21                             loadFilter: JK.pagerFilter,
    22                             onBeforeSelect: function(rowIndex, rowData){
    23                                 return false;    
    24                             }
    25                         });
    26                         
    27 pagerFilter: function(data){
    28                 if (typeof data.length == 'number' && typeof data.splice == 'function'){    // 判断数据是否是数组
    29                     data = {
    30                         total: data.length,
    31                         rows: data
    32                     }
    33                 }
    34                 var dg = $(this);
    35                 var opts = dg.datagrid('options');
    36                 var pager = dg.datagrid('getPager');
    37                 pager.pagination({
    38                     onSelectPage:function(pageNum, pageSize){
    39                         opts.pageNumber = pageNum;
    40                         opts.pageSize = pageSize;
    41                         pager.pagination('refresh',{
    42                             pageNumber:pageNum,
    43                             pageSize:pageSize
    44                         });
    45                         dg.datagrid('loadData',data);
    46                     }
    47                 });
    48                 if (!data.originalRows){
    49                     data.originalRows = (data.rows);
    50                 }
    51                 var start = (opts.pageNumber-1)*parseInt(opts.pageSize);
    52                 var end = start + parseInt(opts.pageSize);
    53                 data.rows = (data.originalRows.slice(start, end));
    54                 return data;
    55             },
    56                                     

    6>其他属性以及项目中出现过得事件

     1 $('#dg').datagrid({   
     2         url:null, 
     3         //pagination类型为boolean,设置为 true,则在数据网格(datagrid)底部显示分页工具栏。
     4         pagination:true, 
     5         //当设置了 pagination 属性时,初始化页面尺寸。
     6         pageSize:20, 
     7         //当设置了 pagination 属性时,初始化页码
     8         pageNumber:1,
     9         //striped类型为boolean,设置为 true,则把行条纹化。(即奇偶行使用不同背景色)
    10         striped:true,
    11         fitColumns:true,  
    12         columns:columns,
    13         //singleSelect类型为boolean,设置为 true,则只允许选中一行。
    14         singleSelect:true,
    15         fit: true,
    16         //事件 参数param 发送加载数据的请求前触发,如果返回 false 加载动作就会取消。
    17         onBeforeSelect:function(){
    18             return false;
    19         },
    20         
    21         //类型为String,设置为 true,当从远程站点加载数据时,显示的提示消息。
    22         loadMsg:'正在全速查询数据,请稍等...',
    23         toolbar: '#dg_tb',
    24         //事件  参数data 当数据加载成功时触发 
    25         onLoadSuccess : function () {
    26             $(this).datagrid("fixRownumber");
    27             
    28             $('#dg').datagrid('loaded');   
    29         },
    30         rownumbers:true ,
    31         loadFilter:pagerFilter,
    32         
    33     }).datagrid('loadData',data);   
    34     
    35 }

    还有没总结的没遇到使用过的日后看http://www.jeasyui.net/plugins/183.html

  • 相关阅读:
    从‘void*’到‘int’的转换损失精度
    ../lib//libscsdblog.so: undefined reference to `pthread_atfork'
    使用Crypto++库的CBC模式实现加密
    VIM常用命令
    mysql bin-log三种模式
    windows64位Oracle安装和PL/SQL配置
    Maven项目中突然找不到Build Path或maven dependencies library
    org.springframework.beans.factory.config.MethodInvokingFactoryBean的使用
    使用Spring的StingUtils的commaDelimitedListToStringArray来获取字符串数组
    Spring注入
  • 原文地址:https://www.cnblogs.com/BraveApple/p/8093113.html
Copyright © 2020-2023  润新知