Как обновить Гугл базового объекта DataTable инструментальной панели визуализации Google и обновить вид приборной панели?


Я создал панель визуализации google с помощью сервиса Google HTML. Базовый datatable (jjdt) объединяется из нескольких таблиц данных,таких как jadt2, fa.

jjdt = google.visualization.data.join(jadt2,fa,'left',[[0,0]],[1,2,3,4,5,6,7,8,9,10,11],[2,3]);   

А затем я создал оболочку диаграммы (finalTable), чтобы показать таблицу на панели мониторинга.

    finalTable = new google.visualization.ChartWrapper({
    'chartType': 'Table',
    'containerId': 'table-div',
    'options': {
      'showRowNumber': false, 
      'width': '100%', 
      'height': '100%', 
      'allowHtml': true, 
      'pageSize': 20
    }
  });

dashboard.bind(wwPicker, [finalTable]);
dashboard.draw(jjdt);

Этот код работал нормально.

Теперь я хочу разрешить нажатием кнопки установить определенные ячейки в базовой таблице (jjdt) на новые значения и получить их отражение на панели мониторинга. Но это не так. все так просто, как я и предполагал.

Я попробовал 2 вещи:

1) с помощью javascript обновить таблицу jjdt для соответствующей ячейки (x, y) и вызвать finalTable.draw ();

    jjdt.setCell(x,y,'New Value');
    finalTable.draw();

Но это не имеет никакого эффекта и никакого сообщения об ошибке.

2) я думаю, что, возможно, оболочка диаграммы создала копию datatable. Поэтому я пытаюсь вернуть этот datatable:

 var mydt = finalTable.getDataTable();
 mydt.setCell(x,y,'New Value');
 finalTable.draw();

Я подумал, что это правильный способ, описанный в документации https://developers.google.com/chart/interactive/docs/reference#methods_4

документация

Однако я получил сообщение об ошибке, в котором говорится, что setCell не является функцией mydt, хотя я могу вызвать mydt.метод GetValue(). Похоже, мой datatable "как-то" доступен только для чтения? Но это DataTable, а не DataView.. Почему это так?

Введите описание изображения здесь

2 2

2 ответа:

Панель мониторинга должна знать об измененном dataTable, поэтому я добавил одну строку в ваше решение 1)

jjdt.setCell(x,y,'New Value');
dashboard.draw(jjdt); // added line
finalTable.draw();

Решение 2) не работает, поскольку getDataTable() является методом класса ChartWrapper, а не методом класса Dashboard класс, следовательно, ваше "не является функцией" сообщение об ошибке.

Я попробовал предложение Пауля, но оно все еще не работает.

Но, немного покопавшись, я, наконец, нашел решение. Проблема в том, что способ, которым я вызвал SetCell, не обновляет "форматированное значение" ячейки. Вот почему я даже подумал, что обновил ячейку таблицы "value", ее формат остается таким же, как и раньше.

Правильный способ сделать это:

jjdt.setCell(x,y,'New Value','New Display Value');

И таким образом только "новое значение отображения" будет отображаться в таблице диаграммы. Но диаграмма будет сортировать на основе "новое значение".

Кроме того, чтобы обновить представление, кажется, либо вызов

dashboard.draw(jjdt)

Или

finalTable.draw()

Будет иметь тот же эффект. Поэтому я просто обновил таблицу с помощью finalTable.рисовать().

Надеюсь, это поможет другим.