当前位置: 首页 > 知识库问答 >
问题:

自定义Google可视化表中的排序列

冀子石
2023-03-14

我已经成功地实现了一个google可视化表,并通过添加events listener为一列添加了自定义排序过程。

背景:数据来自数据库以呈现表。我有几个表列带有“Status”列。此列应根据不显示该表的另一个数据字段进行排序。(所有数据都来自数据库,只需一次查询。它们都运行良好。)在addListener中,我根据自己的需求对从数据库中获取的数组进行排序,并通过table重新创建表。绘制(数据、选项)

google.visualization.events.addListener(table, 'sort',
          function(event) {
        if(event.column ==  4){
        }
   }
} 

现在的问题是谷歌可视化表总是在加载期间按第二列排序。如果用户选择了任何其他列来排序表,则将根据所选列进行排序。它们都正常工作(排序列在表标题中按向下箭头显示)。

但是,当我尝试按字段排序时,我添加了自己的排序过程,之前的排序没有删除(我仍然可以在之前的排序表标题处看到向下箭头标记),因此,添加了排序代码后,排序无法正常工作。如何预防这个问题。

如果不清楚或需要更多信息,请告诉我。

更新:解释

表从从数据库创建的数组中绘制。这是结构

Array
(
    [0] => Array
        (
            [Field 1] => test 1
            [Field 2] =>test 2
            [sortOrder] => 4
            [Field 3] => Array
                (
                    [key 1] => val 1
                    [Name] => test
                    [Date] => 2016-08-18 00:00:00
                    [warningLevel] => OK
                )

        )
....
....
...

从这个数组中,我使用[Field 1]、[Field 2]和[warningLevel]字段作为表列。但是[warningLevel]列应该根据数组中的[sortOrder]字段进行排序。

所以我所做的,我添加了监听器,并在其中重新排列(排序)整个数据数组,并再次重新创建表。

 google.visualization.events.addListener(table, 'sort',
          function(event) {
          if(event.column ==  4){
vData.sort(function(a, b) {
                    var valueA, valueB;

                    valueA = a['sortOrder']; 
                    valueB = b['sortOrder'];
                    if (valueA < valueB) {
                        return -1;
                    }
                    else if (valueA > valueB) {
                        return 1;
                    }
                    return 0;
                });
table.draw(vdata, options);

}
  });

所有其他表列应该按照正常方式排序(当用户排序一列时,它正在排序,如果他移动到排序另一列,则忽略并排序新选择的列。排序列标题有箭头图标),它们工作正常。问题是当我试图对状态列进行排序时,上次排序的列仍然使用它的排序。标题中的箭头仍然显示在较早排序的列中。所以这个列排序没有像预期的那样工作。

任何帮助都将不胜感激。


共有1个答案

和柏
2023-03-14

在绘制图表之前,似乎需要设置以下配置选项
sortColumn

您可以控制排序箭头出现的列(和方向),
而不考虑实际进行的排序

请参阅下面的工作片段,
无论用户单击了什么,数据都将在列0
上排序,而箭头将跟随实际单击的内容。。。

google.charts.load('current', {
  callback: function () {
    var data = google.visualization.arrayToDataTable([
      ['Level', 'Status',   'Sort'],
      [1,       'Critical', {v: 1, f: 'Critical'}],
      [2,       'OK',       {v: 2, f: 'OK'}],
      [3,       'Warning',  {v: 3, f: 'Warning'}],
      [4,       'Message',  {v: 4, f: 'Message'}]
    ]);

    var options = {
      allowHtml: true,
      cssClassNames: {
        tableCell: 'googleTableCell'
      },
      sort: 'event',
      sortAscending: true,
      sortColumn: 0
    };

    var chart = new google.visualization.Table(document.getElementById('chart_div_table'));

    google.visualization.events.addListener(chart, 'sort', function (sender) {
      data.sort([{column: 0, desc: !sender.ascending}]);

      options.sortAscending = sender.ascending;
      options.sortColumn = sender.column;
      
      chart.draw(data, options);
    });

    chart.draw(data, options);
  },
  packages: ['table']
});
<script src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_div_table"></div>
 类似资料:
  • 问题内容: 阅读完之后:http : //pandas.pydata.org/pandas- docs/version/0.13.1/genic/pandas.DataFrame.sort.html 我似乎仍然无法弄清楚如何通过自定义列表对列进行排序。显然,默认排序是字母顺序的。我举一个例子。这是我的(非常删节的)数据帧: 我希望能够按播放器,年份和Tm进行排序。按玩家和年份的默认排序对我来说是正

  • 我对Elasticsearch有一个自定义查询: 当浏览邮递员时,会得出以下结果(不完整): 问题是,现在我想想象一下基巴纳的这些桶。我们的目标是显示24个条形图,每个条形图都有各自的doc_计数。 但是,如果我将查询放入搜索栏,我会得到错误: 。 进入可视化选项卡,添加聚合类型“日期直方图”、字段“开始时间”(这是我的日期字段)、间隔自动和以下json的x点: 还生成一个错误:

  • 我必须根据每行下拉列表的可变值对数据进行排序。 例如,我希望轮班的所有服务员都从下拉列表中处于“就绪”状态。那些下班的人有“下班”状态等。每个人的状态从下拉列表中手动更改,但是,我需要所有“准备就绪”的服务员出现在顶部,然后是所有的“下班”服务员,然后是“休假”服务员等。每次下拉列表中的状态更改时,列表应自动重新排序。 作为一个新手,我对如何实现这一点感到非常无知...我试图根据我看到的类似案例写

  • 问题内容: 如何在Django中定义特定顺序? 具体来说,如果我有QuerySet这样的话:。 我正在寻找以下商品时,按常规订购(使用)会给我。 定义自己的订购技术的正确方法是什么? 问题答案: 据我所知,没有办法以这种方式指定数据库端的排序,因为它过于特定于后端。你可能希望采用老式的Python排序: 如果你发现自己非常需要这种排序,那么建议你为执行排序的模型制作一个自定义子类。就像是:

  • 我正在对JSONArray进行排序,并在自定义列表视图中显示它们,但排序后数据在自定义列表视图中没有改变。 下面是fab按钮选择要执行的排序的代码: 在fab按钮中进行选择后,单击i sort json Array。下面是解析json数组的代码: 我使用`Adapter.NotifyDataSetChanged();但我的自定义列表不会影响排序。请建议我怎么做。

  • 问题内容: 我有这样的查询: 但是,当我打印出来时,它会自动进行1,2,3,4,5的排序。我们如何在不更改数据库结构的情况下保持顺序(2,4,1,5,3)? 谢谢! 问题答案: 我问这个: mysql按问题排序 我得到的答案和所有功劳归于他们: 您可以使用CASE运算符指定顺序: 在PHP中,你可以像这样: