更新jqGrid时如何刷新Google图表

时间:2016-06-06 15:44:08

标签: c# jqgrid google-visualization

我在用户控件中有一个jqGrid,它位于.aspx页面上。我还有一个Google Graph,可以在同一页面上显示网格数据。网格和图表都使用Handler1.aspx作为url。 Handler1.ashx调用SQL服务器并返回JSON。

最初加载页面时,我可以看到图形和图表都进入Handler1.ashx以获取数据 - 所以我得到一个网格和一个漂亮的折线图。

问题是当我更新网格中的数据时,图表不会更新。

我尝试过SO解决方案Here但没有成功。我也在页面上尝试了一个调用drawChart()的按钮。这是我的网格:

        $(function () {
        $('#dataGrid').jqGrid({
            url: 'Handler1.ashx',
            datatype: 'json',
            mtype: 'POST',

            colNames: ["Days", "Origin IB Loads", "Origin OB Loads", "Dest IB Loads", "Dest IB Loads", "ID"],
            colModel: [
                       { name: 'Days', index: 'Days', width: 100, editable: true, editrules: { required: true }, },
                       { name: 'OrigIB', index: 'OrigIB', width: 100, editable: true, editrules: { required: true }, },
                       { name: 'OrigOB', index: 'OrigOB', width: 100, editable: true, editrules: { required: true }, },
                       { name: 'DestIB', index: 'DestIB', width: 100, editable: true, editrules: { required: true }, },
                       { name: 'DestOB', index: 'DestOB', width: 100, editable: true, editrules: { required: true }, },
                       { name: 'ID', index: 'ID', width: 80, Key: true, hidden: true }
                      ],
            loadonce: false,
            pager: '#pagingGrid',
            rowNum: 10,
            rowList: [10, 20, 30, 'All'],
            viewrecords: true,
            gridview: true,
            autoencode: true,
            loadComplete: function (data) {
                $(".ui-pg-selbox option[value='All']").val(10000);
            },
            caption: 'Graph Data',
            editurl: 'Handler2.ashx'
        });

        jQuery("#dataGrid").navGrid("#pagingGrid", {
            edit: true,
            add: true,
            del: true,
            search: false,
            //searchtext: "Search",
            refresh: true
        },
            {
                closeAfterEdit: true,
                reloadAfterSubmit: true
            },
            {
                closeAfterAdd: true,
                reloadAfterSubmit: true
            },
            {
                reloadAfterSubmit: true
            });

    })

这是我的图表 - 包括网格用户控件和图表div:

    google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);


function drawChart() {
    $.ajax({
        url: "handler1.ashx",
        dataType: "json",
        async: "false",
        success: function (jsonData) {
            var data = new google.visualization.DataTable();
            data.addColumn('number', 'Days');
            data.addColumn('number', 'Origin IB Loads');
            data.addColumn('number', 'Origin OB Loads');
            data.addColumn('number', 'Dest IB Loads');
            data.addColumn('number', 'Dest OB Loads');
            for (var i = 0; i < jsonData.length; i++) {
                data.addRow([jsonData[i].Days, jsonData[i].OrigIB, jsonData[i].OrigOB, jsonData[i].DestIB, jsonData[i].DestOB]);
            }

            var options = {
                title: 'Single Lane Route Quote',
                is3D: true,
                curveType: 'function',
                legend: { position: 'bottom' },
                vAxis: { title: "Days" },
                hAxis: { title: "Loads" }
            };

            var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
            chart.draw(data, options);
        }
    });

}


<My:GridControl ID ="gridControl" runat="server" />

<div id="curve_chart" style="width: 1000px; height: 500px"></div>

enter image description here

如何在网格中进行更新后刷新图表?

1 个答案:

答案 0 :(得分:0)

如果你尝试过类似的东西会怎样......

  1. 加载Google
  2. 加载jqGrid
  3. loadComplete触发jqGrid
  4. 时加载图表

    这将允许Google开球,然后当网格更新时,图表也会更新......

    google.charts.load('current', {
      callback: loadDataGrid,
      packages: ['controls', 'table']
    });
    
    function loadDataGrid() {
      $('#dataGrid').jqGrid({
          url: 'Handler1.ashx',
          datatype: 'json',
          mtype: 'POST',
          colNames: ["Days", "Origin IB Loads", "Origin OB Loads", "Dest IB Loads", "Dest IB Loads", "ID"],
          colModel: [
                     { name: 'Days', index: 'Days', width: 100, editable: true, editrules: { required: true }, },
                     { name: 'OrigIB', index: 'OrigIB', width: 100, editable: true, editrules: { required: true }, },
                     { name: 'OrigOB', index: 'OrigOB', width: 100, editable: true, editrules: { required: true }, },
                     { name: 'DestIB', index: 'DestIB', width: 100, editable: true, editrules: { required: true }, },
                     { name: 'DestOB', index: 'DestOB', width: 100, editable: true, editrules: { required: true }, },
                     { name: 'ID', index: 'ID', width: 80, Key: true, hidden: true }
                    ],
          loadonce: false,
          pager: '#pagingGrid',
          rowNum: 10,
          rowList: [10, 20, 30, 'All'],
          viewrecords: true,
          gridview: true,
          autoencode: true,
          loadComplete: function (data) {
              $(".ui-pg-selbox option[value='All']").val(10000);
    
              var chartData = new google.visualization.DataTable();
              chartData.addColumn('number', 'Days');
              chartData.addColumn('number', 'Origin IB Loads');
              chartData.addColumn('number', 'Origin OB Loads');
              chartData.addColumn('number', 'Dest IB Loads');
              chartData.addColumn('number', 'Dest OB Loads');
              for (var i = 0; i < data.length; i++) {
                  chartData.addRow([data[i].Days, data[i].OrigIB, data[i].OrigOB, data[i].DestIB, data[i].DestOB]);
              }
    
              var options = {
                  title: 'Single Lane Route Quote',
                  is3D: true,
                  curveType: 'function',
                  legend: { position: 'bottom' },
                  vAxis: { title: "Days" },
                  hAxis: { title: "Loads" }
              };
    
              var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
              chart.draw(chartData, options);
            }
    
          },
          caption: 'Graph Data',
          editurl: 'Handler2.ashx'
      });
    
      jQuery("#dataGrid").navGrid("#pagingGrid", {
          edit: true,
          add: true,
          del: true,
          search: false,
          //searchtext: "Search",
          refresh: true
      },
      {
          closeAfterEdit: true,
          reloadAfterSubmit: true
      },
      {
          closeAfterAdd: true,
          reloadAfterSubmit: true
      },
      {
          reloadAfterSubmit: true
      });
    }