Помощь! Я часами изучал это и не могу найти решение. Я использую Google Interactive Charts API в UpdatePanel, который асинхронно обновляется, когда я изменяю выбор в раскрывающемся списке, что в конечном итоге меняет набор данных для диаграммы Google. Проблема в том, что диаграмма исчезает при обновлении UpdatePanel. Я использую RegisterStartupScript и проверил предупреждение javascript в панели обновления, чтобы убедиться, что javascript работает в UpdatePanel при обновлении, поэтому проблема, похоже, сводится к тому, что делает javascript Google. Возможно, это setOnLoadCallback на самом деле не вызывает drawChart после обновления UpdatePanel? Не уверен, что это так или как это исправить.
Код ниже находится в Public Sub, который вызывается на Page_Load и когда изменяется выбранное значение раскрывающегося списка.
Dim strOutput As New StringBuilder
strOutput.Append("google.load('visualization', '1.0', { 'packages': ['corechart'] });")
strOutput.Append("google.setOnLoadCallback(drawChart);")
strOutput.Append("function drawChart() {")
strOutput.Append("var data = new google.visualization.DataTable();")
strOutput.Append("data.addColumn('string', 'Domain');")
strOutput.Append("data.addColumn('number', 'Value');")
strOutput.Append("data.addRows([")
Dim sqlSelect As New SqlClient.SqlCommand
sqlSelect.CommandText = String.Format("spAnalytics_ViewsByDomain")
sqlSelect.CommandType = CommandType.StoredProcedure
Dim dtChartData As DataTable = clsDB.FillDT(sqlSelect)
Dim commaCounter As Integer = 1
For Each row As DataRow In dtChartData.Rows
If ddlStat.SelectedValue = "hits" Then
strOutput.Append(String.Format("['{0}',{1}]", row.Item("domain"), row.Item("hit_count")))
ElseIf ddlStat.SelectedValue = "sessions" Then
strOutput.Append(String.Format("['{0}',{1}]", row.Item("domain"), row.Item("session_count")))
End If
If commaCounter <> dtChartData.Rows.Count Then strOutput.Append(",")
commaCounter = commaCounter + 1
Next
strOutput.Append("]);")
strOutput.Append("var options = { 'title': 'Views by domain',")
strOutput.Append("'width': 500,")
strOutput.Append("'height': 300")
strOutput.Append("};")
strOutput.Append("var chart = new google.visualization.PieChart(document.getElementById('chart_div'));")
strOutput.Append("chart.draw(data, options);")
strOutput.Append("}")
ScriptManager.RegisterStartupScript(litDomains, GetType(String), "blahblah", strOutput.ToString, True)