Обновить портативный стол

Я хочу обновить сетку handsontable. У меня есть несколько столбцов с раскрывающимся списком, заполненным данными моей базы данных. Но на моей странице у меня есть первая сетка, которая вставляет данные в эту базу данных, и я получаю их во второй сетке. Но поскольку моя вторая сетка не обновляется, я не могу получить последнее значение, которое я просто вставляю в первую сетку.

Итак, как я могу обновить содержимое handsontable, пожалуйста?

ИЗМЕНИТЬ:

Я сделал jsfiddle, который иллюстрирует мою проблему: http://jsfiddle.net/9onuhpn7/10/ On мой 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).'},';



?>]

person Erlaunis    schedule 29.07.2015    source источник
comment
я думаю, что mpusarla имеет смысл. не могли бы вы просто нам jsfiddle? я не уверен, что понимаю, о чем вы просите   -  person ZekeDroid    schedule 29.07.2015
comment
@ZekeDroid я отредактировал свой пост   -  person Erlaunis    schedule 30.07.2015


Ответы (4)


Просто вызовите hot.render();, где hot относится к объекту Handsontable.

Отлично сработало для меня.

person Shimmy Weitzhandler    schedule 31.12.2015
comment
Я бы также добавил, что иногда hot.render() может потребоваться дважды. (В моем случае 1-й вызов изменил размер HOT, но столбцы заголовков и столбцы записей были смещены, поэтому 2-й вызов принудительно выравнивал). - person KareemElashmawy; 12.03.2018

Я получаю это сейчас. Вы хотите динамически обновлять источники для раскрывающихся списков. Это должно быть легко со следующим кодом:

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

Обязательно добавьте это после того, как arrayTest получит новые значения, и вы должны быть готовы к работе. Вот ваша скрипка со строкой, добавленной в нужном месте.

person ZekeDroid    schedule 30.07.2015
comment
Спасибо, но я нашел, что было не так. Поскольку я получаю данные из базы данных с помощью sql-запроса, даже если я обновляю горячее, запрос не выполняется дважды. Поэтому мне пришлось создать массив с данными, как в скрипке. И это работает сейчас. - person Erlaunis; 31.07.2015

Попробуйте установить для параметраObservChanges значение true. Это должно обнаружить изменения в источнике данных и снова отобразить сетку.

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

person mpusarla    schedule 29.07.2015
comment
Кажется, это не работает, даже если кажется, что это то, что я ищу. - person Erlaunis; 29.07.2015
comment
У меня есть этот код, вы видите, где я делаю неправильно? var hot = new Handsontable (контейнер, { данные: data_parcelle_elementaire, stretchH: 'все', minSpareRows: 1,ObservChanges: true, rowHeaders: false, colHeaders: false, contextMenu: true, height: 550, - person Erlaunis; 29.07.2015
comment
Можете попробовать установить для ColumnSorting значение true. По умолчанию для параметраObserveChanges задано значение false, но установка для параметра ColumnSorting значения true позволит включить параметрObservChanges. - person mpusarla; 29.07.2015
comment
Вы имеете в виду стереть наблюдаемые изменения и добавить ColumnSorting? Или поставить оба? С обоими это не работает :/ - person Erlaunis; 29.07.2015
comment
Если вы можете подготовить jsfiddle, это поможет. - person mpusarla; 29.07.2015
comment
Этот параметр больше не отображается в новой документации. Пожалуйста, предоставьте небольшое доказательство концепции. - person Shimmy Weitzhandler; 31.12.2015

Принятый ответ у меня не сработал, но следующий код работал нормально.

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

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