Как обновить Гугл базового объекта 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 ответа:
Панель мониторинга должна знать об измененном 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.рисовать().
Надеюсь, это поможет другим.