【问题标题】:Google visualization is small inside AJAX Control Toolkit Tab ControlGoogle 可视化在 AJAX Control Toolkit Tab Control 内部很小
【发布时间】:2010-02-25 19:28:34
【问题描述】:

我正在尝试在 asp.net AJAX 工具包选项卡控件中使用谷歌可视化柱形图,但我遇到了一些小问题(字面意思)。

如果我将可视化添加到页面加载时默认显示的选项卡,条形图会正确显示,但是,如果我将相同的控件添加到另一个选项卡并重新加载页面,当我单击另一个选项卡时,控件已显示,但其很小且无法使用

下面是一些说明问题的 test.aspx 页面的代码:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="TestProject._Default" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>

    <script type="text/javascript" src="http://www.google.com/jsapi"></script>

    <script type="text/javascript">
        google.load('visualization', '1', { packages: ['columnchart'] });
    </script>

    <script type="text/javascript">
        function drawVisualization() {
            // Create and populate the data table.
            var data = new google.visualization.DataTable();
            data.addColumn('string', 'Name');
            data.addColumn('number', 'Height');
            data.addRows(3);
            data.setCell(0, 0, 'Tong Ning mu');
            data.setCell(1, 0, 'Huang Ang fa');
            data.setCell(2, 0, 'Teng nu');
            data.setCell(0, 1, 174);
            data.setCell(1, 1, 523);
            data.setCell(2, 1, 86);

            // Create and draw the visualizations.
            new google.visualization.ColumnChart(document.getElementById('visualization1')).
            draw(data, null);
            new google.visualization.ColumnChart(document.getElementById('visualization2')).
            draw(data, null);
        }
        google.setOnLoadCallback(drawVisualization);
    </script>

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <div>
        <cc1:TabContainer ID="TabContainer1" runat="server">
            <cc1:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1">
                <ContentTemplate>
                    <div id="visualization1" style="width: 300px; height: 300px;">
                    </div>
                </ContentTemplate>
            </cc1:TabPanel>
            <cc1:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel2">
                <ContentTemplate>
                    <div id="visualization2" style="width: 300px; height: 300px;">
                    </div>
                </ContentTemplate>
            </cc1:TabPanel>
        </cc1:TabContainer>
    </div>
    </form>
</body>
</html>

【问题讨论】:

    标签: tabs controls ajaxcontroltoolkit tabcontrol google-visualization


    【解决方案1】:

    好的,我没有收到对这篇文章的任何回复,所以这是我解决此问题的方法,希望对某人有所帮助。

    我从来没有真正找到这个问题的根源,但我发现如果我延迟加载可视化直到包含它的选项卡被点击,那么问题就会消失。

    在 TabControl 中,我调用一个 JavaScript 函数来在单击时加载选项卡可视化:

    <cc1:TabContainer ID="TabContainer1" runat="server" OnClientActiveTabChanged="tabChanged">
      <cc1:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel1">
        <ContentTemplate>
          <div id="visualization1" style="width: 300px; height: 300px;"></div>
        </ContentTemplate>
      </cc1:TabPanel>
        <cc1:TabPanel runat="server" HeaderText="TabPanel1" ID="TabPanel2">
          <ContentTemplate>
            <div id="visualization2" style="width: 300px; height: 300px;"></div>
          </ContentTemplate>
      </cc1:TabPanel>
    </cc1:TabContainer>
    

    JavaScript 函数

    function tabChanged(sender, args) {
            var ActiveTab = sender.get_activeTabIndex();
            if (sender.get_activeTabIndex() == 0) {
                if (tab0Loaded != true) { 
                    //load the visualisation
                    new google.visualization.ColumnChart(document.getElementById('visualization2')).draw(data, null);
                    tab0Loaded = true
                }
            }
            if (sender.get_activeTabIndex() == 1) {
                if (tab1Loaded != true) { 
                    //load the visualisation
                    new google.visualization.ColumnChart(document.getElementById('visualization2')).draw(data, null);
                    tab1Loaded = true
                }
            }
    
     }
    

    在回发期间,活动选项卡可能会发生变化,为了解决这个问题,我有一个在页面加载时执行的 JavaScript 函数,如果当前活动选项卡是包含可视化的选项卡,那么我会加载它。

    【讨论】:

      猜你喜欢
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-07
      相关资源
      最近更新 更多