信息管理系统的主要工作是信息,即数据的存储;其次是对存储数据的分析和展示。

  • 数据的存储通过数据库完成,形成结构化的数据结构,方便数据的整理;
  • 数据的分析通过数据库操作,将数据经过清洗、转换,生成所需的数据集合;然后加载到所需的界面进行展示。
  • 数据的展示可以分为三类:文字、表格、图形

数据的表格展示  

参考:12款 JavaScript 表格控件(DataGrid) https://www.cnblogs.com/i7758/p/7160509.html

    1. HTML table
        使用HTML格式中<table>标签,定义表格名称、表格头、表格体
* 需要解决的问题:表格形式简单(用户感受低)、表格头和列锁定(易用性差)

<table style="white-space:nowrap;width:100%; font-size:10px; border:solid; border-width:0px;" class="table">#}
<caption style="font-size:15px;font-weight:bold;color:#ffff66;background-color:#668899;">
    Show Table
</caption>
<tr>
  // show table head
    <th bgcolor="#669900" style="color:white"> table head1 </th>
    <th bgcolor="#669900" style="color:white"> table head2 </th>
    <th bgcolor="#669900" style="color:white"> table head3 </th>
    ......
</tr>
<tr>
  // show table data list
{% for dr in data_request %}   //get data list from django view
  //show table data
    <td align="left" valign="middle" bgcolor="#F5F5F5">{{dr.table_data1}}</td>
    <td align="left" valign="middle" bgcolor="#F5F5F5">{{dr.table_data2}}</td>
    <td align="left" valign="middle" bgcolor="#F5F5F5">{{dr.table_data3}}</td>
    ......
</tr>
{% endfor %}
</table>

    2. JSgrid
参考:http://js-grid.com/

  // JS引入及CSS样式使用
  <script type="text/javascript" src="{% static  "js/jquery-3.4.1.js" %}"></script>
  <link type="text/css" rel="stylesheet" href="{%  static "css/jsgrid.min.css" %}" />
  <link type="text/css" rel="stylesheet" href="{%  static "css/jsgrid-theme.min.css" %}" />
  <script type="text/javascript" src="{% static  "js/jsgrid.min.js" %}"></script>

  // JS脚本引入JSgrid
  <script>
  // 定义表格数据格式:table_head, table_data  
    var table_data = [
      {% for dr in data_request %}   //get data list from django view
        {
          "head_name1" : '{{ dr.table_data1 }}',
          "head_name2" : '{{ dr.table_data2 }}',
          "head_name3" : '{{ dr.table_data3 }}',
          ......
        {% endfor %}
                     ];
  // JSgride设置      
    $("#jsGrid").jsGrid({
  // 样式设置
      width: "100%",
      height:"100%",
      size: "8px",
      {#       inserting: true,#}
      {#       editing: true,#}
      sorting: true,
      paging: true,
      data: projects,
      headrowrender: [],
  // 数据格式设置
      fields: [
                { name : "table_data1",width:40},
                { name : "table_data2",width:50},
                { name : "table_data3",width:120 },
                ......
            {#            { type : "control" }#}
              ]
        });
  </script>

    3. JQgrid
参考:http://www.trirand.com/blog/
           http://www.trirand.com/blog/jqgrid/jqgrid.html
           https://blog.mn886.net/jqGrid/    

<style>
.ui-jqgrid .ui-jqgrid-title{font-size:16px;}    /*修改grid标题的字体大小*/ 
.ui-jqgrid-sortable {font-size:10px;}   /*修改列名的字体大小*/         
.ui-jqgrid tr.jqgrow td {font-size:10px; } /*修改表格内容字体*/
</style>

  // JS引入及CSS样式使用
  <script type="text/javascript" src="{% static  "js/jquery-3.4.1.js"%}">  </script>
  <link type="text/css" rel="stylesheet" href="{%  static "css/ui.jqgrid.css" %}" />
  <link type="text/css" rel="stylesheet" href="{%  static "css/jquery-ui.theme.css" %}" }
  <link type="text/css" rel="stylesheet" href="{%  static "css/jquery-ui.theme.min.css" %}" />
  <script type="text/javascript" src="{% static  "js/jquery.jqGrid.min.js"%}"></script>
  <script type="text/javascript" src="{% static  "js/jquery.jqGrid.src.js"%}"></script>

<table id=data_table style="white-space:nowrap; width:100%; font-size:10px; border:solid; border-width:0px;" class="table">
</table>
<script>
  //官方文档提供的方法,使用固定列后性能下降迅速,原因不明?
{#     $(function(){#}
{#      pageInit1();#}
{#    });#}

  // 表格行、单元格、列进行渲染
    function viewCellAttr(rowId, val, rawObject, cm, rdata) {
            rowId = rowId - 1;
            t1 = $(this).getCell(rowId,"table_column_data_name");
            //val, 存储使用当前函数的单元格的值,多个单元格使用时按顺序存储
            return $('#'+ rowId).find("td").css("background-color", "#FFD700");

{#    function pageInit1()#}
    {
      var grid = $("#data_table").jqGrid(
          {
{#        url:'real_data_url',#}
{#        datatype:"json",#}
        datatype:"local",
{#        altRows: true,#}
        height : '100%',
        width: '100%',
  // 设置显示列
        colNames: ["head1","head2","head3",......],
  // 设置列格式
        colModel: [
                    {name: 'name1',index: 'index1',width: '100%', align: 'left', frozen : true}, // frozen 列冻结
                    {name: 'name2',index: 'index2',width: '100%', align: 'left',cellattr: viewCellAttr},
                    {name: 'name3',index: 'index3',width: '100%', align: 'left'},
                    ......
                  ],
  // 设置表格显示格式
  // 分页显示
{#      rowNum:20,#}
{#      rowList:[10,20,30],#}
{#      pager: "indivdual_html_element",#}
{#      loadonce : true,#}
        width:1599,
        sortname: '',
        gridview: true,
        viewrecords: true,
{#      scroll:true,#}  // 影响表头是否可以锁定
{#      jsonReader: {#} // Json方法读取数据,待尝试
{#        root: "rows",#}
{#        page: "page",#}
{#        total: "total",#}
{#        records: "records",#}
{#        repeatitems: false#}
{#                   },#}
        shrinkToFit: false,
        caption : "Table caption",
        rownumbers: true,
{#      width: 'auto',#}
        height: 400,
  });
  // Json, not complete
{#         var reader = {#}
{#           root: function(obj) { return results.rows; },#}
{#           page: function(obj) { return results.page; },#}
{#           total: function(obj) { return results.total; },#}
{#           records: function(obj) { return results.records; }#}
{#        }#}
{#         grid.setGridParam({data: {{ pro_per }}.rows, localReader: reader}).trigger('reloadGrid');#}

 // get table data
  var mydata = [
      {% for dr in table_data %}  // get data from veiw
          {
            "head1":                  '{{ dr.table_data1 }}',
            "head2":                  '{{ dr.table_data1 }}',
            "head3":                  '{{ dr.table_data1 }}',
            ......
      {% endfor %}
               ];
  // get and show
  for ( var i = 0; i <= mydata.length; i++){
      jQuery("#data_table").jqGrid('addRowData', i + 1, mydata[i]);
  }

  // fix column that set frozen
  jQuery("#data_table").jqGrid('setFrozenColumns');
    }
  </script>

4. JQgrid 问题记录

  • 多行文本在前台页面无法显示,且回车/换行格式无法显示
    原因分析:html页面无法解析 \r,\n,&lt;,&gt字符,需要替换为html可以识别的<br> 或 <p>操作
    解决方法:
    1)多行文本在前台页面无法展示
    分解raw生成后的RawQuerySet,使用list将对应自段按dict格式进行分解存储,render到前台
          * view页面,raw方法生成RawQuerySet,解析成数据list:list名.append({"字段显示值" : 字段值)
          * template前台页面,list名.字段显示值,显示数据到前台
    2)回车/换行格式无法显示
    文本中的 \r,\n,&lt;,&gt字符替换为html识别的<br> 或 <p>
         * view页面list数据改造:字段值.replace("\r\n",'<br>')  -- 此时将\r, \n用<br>替换存储
         * template前台页面data数据:字段值.replace(/&lt;/g, '<').replace(/&gt;/g, '>' )  -- 由于前台\r \n显示为&lt &gt再次进行换
  • 表格最后一行(total行)颜色设置,更改指定单元格数据值
    解决方法:jqgrid的gridComplete事件中处理
    //style中设置CSS样式
    .SelectBG{
        background-color:#eeeeee;
        }
    
    gridComplete: function () {
                    var ids = $("#jqgrid实例名").getDataIDs();
    
    //jqgrid实例查找到对应的 tr, td,并按CSS样式渲染
                    ($('#jqgrid实例名').find("tr[id='" + ids.length + "']").find("td")).addClass("SelectBG");
    
    //jqgrid实例查找到对应的 tr, td,更改单元格内容
    ($('#jqgrid实例名').find("tr[id='"+ ids[数据列行号] +"']").find("td")[数据行列号].innerHTML="-");
    }

     

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐