【问题标题】:Refresh a handsontable刷新handsontable
【发布时间】:2015-10-20 12:59:04
【问题描述】:

我想刷新一个可动手操作的网格。我有一些带有下拉列表的列,其中填充了我的数据库数据。但是在我的页面中,我有一个在这个数据库中插入数据的第一个网格,然后我将它们放入我的第二个网格中。但由于我的第二个网格没有刷新,我无法获得我刚刚插入第一个网格的最后一个值。

那么我该如何刷新handsontable的内容呢?

编辑:

我做了一个 jsfiddle 来说明我的问题: http://jsfiddle.net/9onuhpn7/10/ 在我的 jsFiddle 上,它可以工作,当我将它们推送到数组中时,我可以获得这些值。但是对于我的真实应用程序和数据库,它不起作用。

所以我的代码中有这个而不是数组(它可以工作,但没有刷新):

columns:[
<?php 

    $conn_string = "host=localhost port=5432 dbname=test_postgre user=postgres password='1234'";
    $dbconn = pg_connect($conn_string);

    $sql = "SELECT ".$colonne." FROM public.".$tablevar."";
    $res = pg_query($sql) or die("Pb avec la requete: $sql");

    $data = pg_fetch_all($res);

    $indexedOnly = array();

    foreach ($data as $row) {
                $indexedOnly[] = array_values($row);
    }
    echo '{type:\'dropdown\',';
    echo 'source:'.json_encode($indexedOnly).'},';



?>]

【问题讨论】:

  • 我认为 mpusarla 是有道理的。你能给我们一个jsfiddle吗?我不确定我是否理解您的要求
  • @ZekeDroid 我编辑了我的帖子

标签: javascript php handsontable


【解决方案1】:

只需调用hot.render();,其中hot 指的是Handsontable 对象。

对我来说效果很好。

【讨论】:

  • 我还要补充一点,有时 hot.render() 可能需要调用两次。 (在我的用例中,第一次调用调整了 HOT 的大小,但标题列和记录列未对齐,因此第二次调用强制对齐)。
【解决方案2】:

我现在明白了。您想动态更新下拉菜单的来源。使用以下代码应该很容易:

hot2.updateSettings({
    columns: [{
        type: 'dropdown',
        source: arrayTest
    }]
})

确保在 arrayTest 具有新值之后添加它,并且您应该准备好去。这是您的fiddle,在正确的位置添加了行。

【讨论】:

  • 谢谢,但我发现了问题所在。当我使用 sql 请求从数据库中获取数据时,即使我刷新热点,请求也不会执行两次。所以我不得不用数据创建一个数组,就像在小提琴中一样。现在可以了。
【解决方案3】:

尝试将 observeChanges 选项设置为 true。这应该会检测到数据源的变化并再次渲染网格。

https://github.com/handsontable/handsontable/wiki/Options#constructor-options

【讨论】:

  • 它似乎不起作用,即使它似乎是我正在寻找的东西。
  • 我有这段代码,你知道我哪里做错了吗? var hot = new Handsontable(container, { data: data_parcelle_elementaire, stretchH: 'all', minSpareRows: 1, observeChanges : true, rowHeaders: false, colHeaders: false, contextMenu: true, height: 550,
  • 您可以尝试将 ColumnSorting 设置为 true。默认情况下,observeChanges 为 false,但将 ColumnSorting 设置为 true 将启用 observeChanges。
  • 您的意思是删除“observeChanges”并添加“ColumnSorting”吗?或者两者都设置?对于他们两个,它都不起作用:/
  • 如果你能准备一个 jsfiddle,那会有所帮助。
【解决方案4】:

接受的答案对我不起作用,但以下代码运行良好。

let hot = new Handsontable(this.hotTableComponentTest.nativeElement, {
      data: [["","",""]]   ,
      ...
    });

if (value && value.length>0 && this.hot) {
      this.hot.getInstance().loadData(value);
      this.hot.getInstance().render();
    }

【讨论】:

    猜你喜欢
    • 2018-02-10
    • 2016-10-21
    • 2017-11-03
    • 1970-01-01
    • 2016-06-03
    • 2020-07-08
    • 2013-07-03
    • 2015-10-19
    • 2013-11-26
    相关资源
    最近更新 更多