生活就好像一盒巧克力

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

绑定到数据源 Office XP 图表组件

注意:这篇文章是由无人工介入的自动的机器翻译系统翻译完成。这些文章是微软为不懂英语的用户提供的, 以使他们能够理解这些文章的内容。微软不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的使用所引起的任何直接的, 或间接的可能的问题负责。
文章编号 : 288907
最后修改 : 2005年8月23日
修订 : 2.2

概要

Microsoft Office 2003 图表组件和 Microsoft Office XP 图表组件可绑定到 ActiveX 数据对象 (ADO) Recordset 对象、 所有其他 MicrosoftOfficeWeb 组件 (Spreadsheet 组件、 数据透视表组件和 DataSource 组件) 和任何其他控件, 支持 IDataSource 接口。 本文介绍用于生成图表是数据绑定以及如何使用不同属性和 ChartSpace 中一个或多个图表上绘制不同方法对于 ChartSpace 对象来指定如何绑定数据基本概念。 为了举例, 记录集用作数据源示例代码中。 但是, 显示有关数据绑定本文概念可应用于任何其他类型的数据源, 图表组件可绑定到。

更多信息

Chart 组件可以绑定到下列方式之一中数据源:
ChartSpace 对象的 DataSource 属性设置为 Office DataSourceControl 控件、 Office Spreadsheet 控件、 一个 Office 透视 控件或打开 ADO 记录, 运行时生成。 通过 DataSource 属性绑定到图表数据源是外部数据源。
ConnectionString 属性和要创建用于数据源由图表组件的 ChartSpace 对象 CommandText 属性。 以此方式创建数据源被视为内部数据源。
绑定图表组件后, 您可以再设置 ChartSpace 对象以指定如何绘制数据的一个或多个属性:
HasMultipleCharts 属性: 此属性设置到 TRUE FALSE 以指示是否指定 ChartSpace 包含多个图表。
SetData 方法: 使用 SetData 来指示字段和总计必须代表类别和值图表。 SetData 还提供对图表系列名称。
PlotAllAggregates 属性: 设置 PlotAllAggregates 属性来指定如何跨 ChartSpace 中一个或多个图表绘制数据。

绑定 ChartSpace 与单个图表

考虑 ChartSpace 绑定到 ADO 记录集包含针对产品类别列和四列表示季度销售额为每个类别。 如果要显示单个图表与销售有关, 作为一系列图表, 上绘制每季度可将 HasMultipleCharts FALSE PlotAllAggregates chPlotAggregatesSeries 用以下代码:

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 仍有一个图表, 但必须代替四个系列。 图表类别有两个级别: CategoryName 字段和其他级别为 quarters 一个级别。 后面图示说明中 PlotAllAggregates chPlotAggregatesSeries chPlotAggregatesCategories 时如何绘制数据差异:

Illustration of a Chart where PlotAllAggregates is chPlotAggregatesSeries.

Illustration of a Chart where PlotAllAggregates is chPlotAggregatesCategories.

绑定 ChartSpace 与多个图表

如果将设置为 TRUE PlotAllAggregates HasMultipleCharts chPlotAggregatesCharts 通过, 前一节中所述相同 ADO 记录可以显示一个图表对于每个季度的销售量。 例如, 结果的以下代码是四图, 其中每个图表包含单个系列用于季度 1、 对于季度 2 个图表、 对于季度 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.

chPlotAggregatesCharts , 字段 (或总计) 将 PlotAllAggregates 绑定数据源中总是在创建 multichart ChartSpace 显示为系列自己图表上。 有无法有两或更多字段从数据源相同图表上绘制。 例如, 有是无法修改前面的代码以便用于 " 季度 1 " 和 " 季度 " 2 绑定数据对于 3 " 季度 " 显示在一个图表和绑定数据而其他图表上显示 " 季度 4 "。 如果需要, 数据以此方式, 显示您可能需要对图表, 使用结合了绑定数据和原意数据或只使用原意数据完全。

多图表可还通过使用 SetData 方法设置 chDimCharts 维度绘制 ChartSpace 中。 通过 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 对象模型、 ChartSpace、 图表和系列中所有公开 SetData 方法。 当 ChartSpace 绑定到数据源, 您只能使用 SetData 方法对于 ChartSpace 对象来绑定数据源中添加系列或值。 如果您尝试使用 SetData 用于图表或系列已因绑定, 创建可能会收到以下运行时错误之一:
运行时错误 ' - 2147467259 (80004005) ':
' SetData ' ofobject ' ChChart ' 方法失败。
运行时错误 ' - 2147467259 (80004005) ':
' SetData ' ofobject ' ChSeries ' 方法失败。
用于数据绑定图表一般准则是 SetData 方法可用于单个图表或到系列 如果 添加图表或系列以通过 ChartSpace 添加 方法 要加载到添加图表或系列文本数据 (逗号分隔字符串或数组)。

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 罗斯文示例数据库图表。 可以三种方式之一创建记录集:
使用 ADO 记录。
使用 ConnectionString 属性和 ChartSpace 对象的 CommandText 属性。
使用 Office DataSourceControl DSC (之间)。
结果是无关的数据源相同图表键入选择。 图表连接到数据源后, 通过的 HasMultipleCharts 属性、 PlotAllAggregates 属性和 SetData 方法不同组合来如何每影响结果图表和 ChartSpace 中系列显示绘制绑定数据。
1. 以下 HTML 代码复制到文本编辑器并保存它作为 BoundChart.htm 。 如果必要, 可以修改对于 sConn 变量 Connect 函数中赋值以便匹配 Northwind.mdb 的路径的 Office 安装。

注意 以下代码使用 DataSourceControl 对象 10.0 和 10.0 ChartSpace 对象。 有关 Office System 2003 版本和 DataSourceControl 对象的 ChartSpace 对象, 则必须替换 clsid 每个值分别与此版本的 Office Web 组件 2003。

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

对于 ChartSpace 对象 11.0 编程标识符是 CLSID:0002E55D - 0000 - 000000000046 - C000 - 0000。

<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:   
            <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. 启动 InternetExplorer 并将移动到 BoundChart.htm。
3. 单击网页来检查每个不同的图表组合上各个按钮。

注意 您可能还选择不同数据源类型。 结果图表都不管供您选择数据源类型相同。
posted on 2006-06-19 11:48  yiriqing  阅读(1062)  评论(0编辑  收藏  举报