文章编号: 288907 - 最后修改: 2007年2月22日 - 修订: 2.4

信息: 将 Office XP 图表组件绑定到数据源

展开全部 | 关闭全部

概要

Microsoft Office 2003 图表组件和 Microsoft Office XP 图表组件可以将绑定到 ActiveX 数据对象 (ADO) 记录集 对象所有其他 Office Web 组件 (该电子表格组件、 数据透视表组件和数据源组件),并支持 IDataSource 接口的任何其他控件。 本文介绍了用于构建图表的数据绑定,而您可以使用不同的属性和在 图表工作区 中的一个或多个图表上绘制 图表工作区 对象,来指定如何绑定的数据的不同方法的方式的基本概念。 用于说明目的记录集用作数据源中的代码示例。 但是,数据绑定有关本文中介绍的概念可应用于任何其他类型的图表组件可以将绑定到的数据源。

更多信息

您可以将图表组件绑定到数据源中通过以下方法之一:
  • 图表工作区 对象的 数据源 属性设置为 Office DataSourceControl 控制、 Office 电子表格 控件、 是 Office 数据透视表 控件或在运行时生成一个打开的 ADO 记录集。 数据通过使用 数据源 属性绑定到图表的源是外部数据源。
  • ConnectionString 属性和图表组件通过创建数据源用于 图表工作区 对象的 CommandText 属性设置。 这种方式创建一个数据源被视为内部数据源。
绑定图表组件后,然后可以设置将指定如何绘制数据 图表工作区 对象的一个或多个属性:
  • HasMultipleCharts 属性: 设置此属性为 TRUEFALSE 来表示指定图表工作区是否包含多个图表。
  • SetData 方法: 使用 SetData 以指示的字段、 分类和值对于该图表必须代表的总计。 SetData 还提供了图表系列的名称。
  • PlotAllAggregates 属性: 设置 PlotAllAggregates 属性来指定数据在该图表工作区中的一个或多个图表之间的绘制方式。

绑定与单个图表的图表工作区

请考虑所绑定到 ADO 记录集包含一个产品类别列和四列表示为每个类别的季度销售额的图表工作区。 如果要显示绘制为一系列在图表上每个季度的销售额在一个图表,您可以设置为 FALSEPlotAllAggregatesHasMultipleChartschPlotAggregatesSeries 用下面的代码以:

Set CSpace.DataSource = oRs   'Where oRs is an ADODB.Recordset object.
    CSpace.HasMultipleCharts = False
    CSpace.PlotAllAggregates = c.chPlotAggregatesSeries
    CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
    CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2", "Qtr 3", "Qtr 4")
如果您要 chPlotAggregatesCategories 中前面的示例代码更改 PlotAllAggregates 仍然必须只有一个图表,但有一个数据系列,而不是四个。 图表类别有两个级别: 一个级别,为该类别名称字段和季度的另一个级别。 下面的插图显示在 PlotAllAggregateschPlotAggregatesSerieschPlotAggregatesCategories 时如何绘制数据方面的差异:

收起这个图片展开这个图片
Illustration of a Chart where PlotAllAggregates is chPlotAggregatesSeries.

收起这个图片展开这个图片
Illustration of a Chart where PlotAllAggregates is chPlotAggregatesCategories.

绑定与多个图表的图表工作区

通过使用在上一节中描述了在相同的 ADO 记录集,您可以显示一张图表的每个季度销售额,如果 chPlotAggregatesCharts 到设置为 TRUEPlotAllAggregatesHasMultipleCharts。 渚嬪下面的结果是代码的其中的每个图表都包含单个数据系列 (第 1 季度、 季度 2 一张图表、 Qtr 3 为一张图表和第 4 季度为一张图表的一个图表) 的四个图表:

 Set CSpace.DataSource = oRs   'Where oRs is an ADODB.Recordset object.
    CSpace.HasMultipleCharts = True
    CSpace.PlotAllAggregates = c.chPlotAggregatesCharts
    CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
    CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2", "Qtr 3", "Qtr 4")
收起这个图片展开这个图片
Illustration of a Chart where
		  PlotAllAggregates is chPlotAggregatesCharts.


当通过将 PlotAllAggregateschPlotAggregatesCharts,字段 (或合计) 设置绑定的数据源中,始终创建 multichart 图表工作区显示为他们自己的图表上的一个数据系列。 没有任何方法可以有两个或更多的字段从数据源相同的图表上绘制。 渚嬪没有方法修改前面的代码,以使绑定的数据,"季度 1 和"季度 2 对"季度 3 显示上一张图表和绑定的数据和"季度 4 将出现在另一个图表上。 如果您需要这种方式呈现数据,您可能有对于该图表使用绑定的数据和文字类型数据的组合,或者只是完全使用文字类型数据。

多个图表通过使用 SetData 方法利用设置 chDimCharts 维度还在一个图表工作区中绘制。 通过 chDimCharts 维度可以划分 (或筛选) 之间基于另一个字段中的值的多个图表系列。 请重新考虑该 ADO 记录集,其中包含有关产品类别和季度销售额的列,并再假定是指示从第三季度销售额是否增加第四季度销售情况的一个附加列。 其他列可用于划分在多个图表显示在同一图表中的第四个的季度增加的组系列,并显示第四季度下降另一个图表中的组数据系列之间的系列:

Set CSpace.DataSource = oRs   'Where oRs is an ADODB.Recordset object
    CSpace.HasMultipleCharts = True
    CSpace.PlotAllAggregates = c.chPlotAggregatesSeries
    CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
    CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 3", "Qtr 4")
    CSpace.SetData c.chDimCharts, c.chDataBound, "Qtr4Increase"
结果是包含两个图表上绘制的所有数据系列的图表。 第一张图表包含的系列,其中第四季度销售额增加,第二个图表包含一系列第四季度销售额下降的位置。 下面的插图代表创建的图表:

收起这个图片展开这个图片
Illustration of a Chart with a
		  chDimCharts Dimension.


与绑定图表使用 SetData 方法

OWC10 对象模型,该图表工作区、 一个图表和一系列中所有公开 SetData 方法。 当在图表工作区绑定到数据源中时,您只能使用 SetData 方法利用为 图表工作区 对象来自绑定的数据源中添加数据系列或值。 濡傛灉灏濊瘯 SetData 用于图表或已创建了绑定的一系列可能会收到下面的运行时错误之一:
  • 运行时错误 ' 2147467259 (80004005):
    对象 'chchart' 失败的 SetData 的方法。
  • 运行时错误 ' 2147467259 (80004005):
    方法的对象 ChSeries SetData 失败。
一般原则是为数据绑定图表是 SetData 方法可将应用到单个图表或系列 如果 您添加图表或系列到该图表工作区通过使用 添加 方法 您正在加载文字类型数据 (逗号分隔的字符串或数组) 以添加图表或数据系列。

Set CSpace.DataSource = oRs   'Where oRs is an ADODB.Recordset object.
    CSpace.HasMultipleCharts = True
    CSpace.PlotAllAggregates = c.chPlotAggregatesCharts
    CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
    CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2")

    'Add an additional series based on literal data to each of the charts
    'in the ChartSpace.
    Dim oChart, oSeries
    For Each oChart in CSpace.Charts
       Set oSeries = oChart.SeriesCollection.Add
       oSeries.SetData c.chDimSeriesNames, c.chDataLiteral, "Goal"
       oSeries.SetData c.chDimValues, c.chDataLiteral, Array(30000, 20000, 25000)
    Next   
前面的代码将绘制"季度 1 销售和独立的图表上的"季度 2 销售、 每个图表中添加其他系列并加载常值数据与新系列:

收起这个图片展开这个图片
Illustration of a Bound ChartSpace with
		  an Added Series for Literal Data


演示

下面的示例演示如何将图表绑定到从示例 Access Northwind 数据库中获取的记录集。 您可以在三种方法中创建记录集:
  • 使用 ADO 记录集。
  • 使用 ConnectionString 属性和 图表工作区 对象的 CommandText 属性。
  • 使用 Office DataSourceControl (DSC)。
结果是相同的内容,无论数据源图表键入您选择。 图表绑定到数据源后,绑定的数据的绘制以显示每个如何影响结果图表和数据系列在图表工作区中的使用 HasMultipleCharts 属性、 PlotAllAggregates 属性和 SetData 方法的不同组合。
  1. 将下面的 HTML 代码复制到文本编辑器,然后将它保存为 BoundChart.htm。 如有必要,您可以修改 连接 函数中 sConn 变量的赋值,以便 Northwind.mdb 的路径匹配您的 Office 的安装。

    注意 下面的代码使用 DataSourceControl 对象 10.0 和 图表工作区 对象 10.0。 对于 Office 系统 2003年版的 DataSourceControl 对象和 图表工作区 对象的必须替换该 clsid 的每个值的 Office Web 组件 2003年版本分别。

    用于 DataSourceControl 对象 11.0 编程标识符是 CLSID:CLSID:0002E55B-0000-0000-C000-000000000046。

    图表工作区 对象 11.0 编程标识符是 CLSID:0002E55D-0000-0000-C000-000000000046。

    <html>
    <head>
    <style>
      td {font-size:'x-small';font-family:'Sans-Serif'}
      select {font-size:'x-small';font-family:'Sans-Serif'}
      button {font-size:'x-small';font-family:'Sans-Serif'}
    </style>
    <object classid="clsid:0002E553-0000-0000-C000-000000000046" id="DSC"></object>
    </head>
    <body>
    
    <table align="Center" cellspacing="5">
    <tr>
      <td>One Chart with a Series for Each Quarter</td>
      <td><button id="btnSeriesOnOneChart" style = "width:100">Go!</button> </td>
    </tr>
    <tr>
      <td>One Chart with One Series and Quarters As a Subordinate Category Level</td>
      <td><button id="btnCategoriesOnOneChart" style="width:100">Go!</button></td>
    </tr>
    <tr>
      <td>Multiple Charts with One Chart Per Quarter</td>
      <td><button id="btnMultiChart" style="width:100">Go!</button></td>
    </tr>
    <tr>
      <td>Multiple Charts with Plots Divided By Qtr4 Increase/Decrease</td>
      <td><button id="btnDivideSeries" style="width:100">Go!</button></td>
    </tr>
    <tr>
      <td>Series Loaded from Literal Data on Bound Chart</td>
      <td><button id="btnCustom" style="width:100">Go!</button></td>
    </tr>  
    <tr>
      <td ColSpan="2">
      Select a DataSource: &#xa0;&#xa0;
      <select id=DataSourceType size=1>
    	<option selected value=0>Bind to an ADO Recordset</option>
    	<option value=1>Use ChartSpace ConnectionString/CommandText Properties</option>
    	<option value=2>Bind to a DataSourceControl</option>
      </select>
      </td>
    </tr>
    </table>
    
    <p align="Center">
    <object classid="clsid:0002E556-0000-0000-C000-000000000046" id="CSpace" width="85%" height="50%">
    </object>
    </p>
    
    </body>
    
    <script language="VBScript">
    
    Dim c
    Set c = CSpace.Constants
    
    Dim oRS
    
    Function Connect()
    
        sSQL = "SELECT [Product Sales for 1997].CategoryName, " & _
                 "Sum(IIf([ShippedQuarter]='Qtr 1',[ProductSales],0)) AS [Qtr 1], " & _
                 "Sum(IIf([ShippedQuarter]='Qtr 2',[ProductSales],0)) AS [Qtr 2], " & _
                 "Sum(IIf([ShippedQuarter]='Qtr 3',[ProductSales],0)) AS [Qtr 3], " & _
                 "Sum(IIf([ShippedQuarter] = 'Qtr 4', [ProductSales], 0)) As [Qtr 4], " & _
                 "IIf([Qtr 4]>[Qtr 3],'Increase in Qtr4','Decrease in Qtr4') AS Qtr4Increase " & _
                 "From [Product Sales for 1997] GROUP BY [Product Sales for 1997].CategoryName " & _
                 "HAVING (CategoryName='Confections' Or CategoryName='Meat/Poultry' Or CategoryName='Beverages')"
        sConn = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                 "Data Source=c:\program files\microsoft office\office10\samples\northwind.mdb" 
          
        CSpace.Clear
                
        Select Case CLng(DataSourceType.value)
    
        Case 0:              'Bind to an ADO Recordset that is built at runtime.
          Set oRS = CreateObject("ADODB.Recordset")
          oRS.Open sSQL, sConn, 3, 3
          Set CSpace.DataSource = oRS
    
        Case 1:              'Bind to a Recordset by using the CommandText/ConnectionString properties.
          CSpace.ConnectionString = sConn
          CSpace.CommandText = sSQL
    
        Case 2:              'Bind to a DataSourceControl (DSC).
          DSC.ConnectionString = sConn
          If DSC.RecordsetDefs.Count < 1 Then
             DSC.RecordsetDefs.AddNew sSQL, DSC.constants.dscCommandText, "QuarterlySales"
          End If
          Set CSpace.DataSource = DSC
          CSpace.DataMember = "QuarterlySales"
           
        End Select
        
    End Function
    
    Function FormatChart(CSpaceTitle, bShowLegend)
        'Hide field buttons.
        CSpace.DisplayFieldButtons = False
        
        'Add the ChartSpace Title.
        CSpace.HasChartSpaceTitle = True
        CSpace.ChartSpaceTitle.Caption = CSpaceTitle
        CSpace.ChartSpaceTitle.Font.Size = 9
        CSpace.ChartSpaceTitle.Font.Bold = True  
        
        If bShowLegend Then
           For Each oChart in CSpace.Charts
              oChart.HasLegend = True
              oChart.Legend.Position =  c.chLegendPositionBottom   
           Next
        End If
    End Function
    
    Function btnSeriesOnOneChart_OnClick()
        Connect
        
        'One Chart with four series (one series per Quarter)
        CSpace.HasMultipleCharts = False
        CSpace.PlotAllAggregates = c.chPlotAggregatesSeries
        CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
        CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2", "Qtr 3", "Qtr 4")
        CSpace.Charts(0).Type = c.chChartTypeBarClustered
        
        sTitle = "PlotAllAggregates = chPlotAggregatesSeries"
        FormatChart sTitle, True
        
    End Function
    
    Function btnCategoriesOnOneChart_OnClick()
        Connect
        
        'One Chart with One Series and Quarters As a Subordinate Category Level
        CSpace.HasMultipleCharts = False
        CSpace.PlotAllAggregates = c.chPlotAggregatesCategories
        CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
        CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2", "Qtr 3", "Qtr 4")
        CSpace.Charts(0).Type = c.chChartTypeBarClustered
        CSpace.Charts(0).SeriesCollection(0).Caption = "Sales"
        
        sTitle = "PlotAllAggregates = chPlotAggregatesCategories"
        FormatChart sTitle, True
        
    End Function
    
    Function btnMultiChart_OnClick()
        Connect
        
        'Four Charts with One Chart Per Quarter
        CSpace.HasMultipleCharts = True
        CSpace.PlotAllAggregates = c.chPlotAggregatesCharts
        CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
        CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 1", "Qtr 2", "Qtr 3", "Qtr 4")
        CSpace.ChartWrapCount = 4
    
        sTitle = "PlotAllAggregates = chPlotAggregatesCharts"
        FormatChart sTitle, False
        
    End Function
    
    Function btnDivideSeries_OnClick()
        Connect
        
        'Build two charts (one for Qtr3 and one for Qtr4) and then divide
        'the plots based on Qtr4 increase/decrease. The result is
        'four charts.
        CSpace.HasMultipleCharts = True
        CSpace.PlotAllAggregates = c.chPlotAggregatesSeries
        CSpace.SetData c.chDimCategories, c.chDataBound, "CategoryName"
        CSpace.SetData c.chDimValues, c.chDataBound, Array("Qtr 3", "Qtr 4")
        CSpace.SetData c.chDimCharts, c.chDataBound, "Qtr4Increase"
        CSpace.ChartWrapCount = 4
    
        sTitle = "PlotAllAggregates = chPlotAggregatesSeries" & vbCrLF & _
                 "chDimCharts Dimension for Increase/Decrease in Fourth Quarter"
        FormatChart sTitle, True
        
    End Function
    
    Function btnCustom_OnClick()
        Connect
        
        'Build two charts (one chart each for Qtr1 and Qtr2 sales).
        CSpace.HasMultipleCharts = True
        CSpace.PlotAllAggregates = c.chPlotAggregatesCharts
        CSpace.SetData c.chDimCategories, 0, "CategoryName"
        CSpace.SetData c.chDimValues, 0, Array("Qtr 1", "Qtr 2")
        CSpace.Charts(0).SeriesCollection(0).Caption = "Qtr 1"
        CSpace.Charts(1).SeriesCollection(0).Caption = "Qtr 2"
        
        'Add an additional series that is based on literal data to each of the charts
        'in the ChartSpace.
        Dim oChart, oSeries
        For Each oChart in CSpace.Charts
           Set oSeries = oChart.SeriesCollection.Add
           oSeries.SetData c.chDimSeriesNames, c.chDataLiteral, "Goal"
           oSeries.SetData c.chDimValues, c.chDataLiteral, Array(30000, 20000, 25000)
        Next 
        
        sTitle = "Bound ChartSpace With An Added Series For Literal Data"
        FormatChart sTitle, True
        
    End Function
    
    </script>
    
    </html>
  2. 启动 Internet Explorer,然后将其移到 BoundChart.htm。
  3. 单击检查每个不同的图表组合在 Web 页上的每个按钮。

    注意 您也可能选择不同的数据源类型。 得到的图表是相同的内容,无论您选择数据源类型。

参考

鏈夊叧浣跨敤 Office Web 组件,请访问下面的 Microsoft 网站:
http://support.microsoft.com/ofd (http://support.microsoft.com/?scid=http%3a%2f%2fsupport.microsoft.com%2fofd)
有关 Office 开发人员中心的其他信息,请访问下面的 Microsoft 网站:
http://msdn.microsoft.com/office/ (http://msdn.microsoft.com/office/)
有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
286320? (http://support.microsoft.com/kb/286320/ ) HOWTO: Bind Office XP 图表在数据透视表组件

这篇文章中的信息适用于:
  • Microsoft Office XP Web Components
关键字:?
kbmt kbdatabinding kbgraphxlink kbinfo KB288907 KbMtzh
机器翻译机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 288907? (http://support.microsoft.com/kb/288907/en-us/ )
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
 

文章翻译