文章编号: 288907 - 最后修改: 2007年2月22日 - 修订: 2.4 INFO: 将 Office XP 图表组件绑定到数据源 Microsoft Office 2003 图表组件和 Microsoft Office XP 图表组件可以绑定到 ActiveX 数据对象 (ADO) Recordset 对象所有其他 Office Web 组件 (电子表格组件、,数据透视表组件和数据源组件),和支持 IDataSource 接口的任何其他控件。 本文介绍了用于构建数据绑定和如何可以使用不同的属性和为 ChartSpace 对象指定如何绑定的数据的不同方法绘制 ChartSpace 中的一个或多个图表上的图表的基本概念。 用于说明目的记录集用作数据源在示例代码。 但是,有关数据绑定本文中提供的概念可用于任何其他类型的图表组件可以绑定到数据源。 您可以将图表组件绑定到数据源以下方法之一中: - 将 ChartSpace 对象的 DataSource 属性设置的 Office DataSourceControl 控件、 一个 Office 电子表格 控件、 一个 Office 数据透视表 控件或在运行时生成的打开 ADO Recordset 中。 数据通过使用 DataSource 属性绑定到图表的源是外部数据源。
- 设置 ConnectionString 属性和若要创建由图表组件的数据源用于 ChartSpace 对象的 CommandText 属性。 在这种方式中创建的数据源被视为一个内部的数据源。
图表组件绑定后,可以设置 ChartSpace 对象指定如何绘制数据的一个或多个属性: - HasMultipleCharts 属性: 设置此属性为 TRUE 或 FALSE 以表示指定的 ChartSpace 中是否包含多个图表。
- SetData 方法: 使用 SetData 以指示字段,并且必须表示类别和图表的值的总计。 SetData 还提供了图表系列的名称。
- PlotAllAggregates 属性: 设置使用 PlotAllAggregates 属性,可以指定在 ChartSpace 中的一个或多个图表上绘制数据的多少。
绑定 ChartSpace 与单个图表 请考虑一个 ChartSpace 绑定到 ADO 记录集包含一列产品类别和为每个类别表示季度销售的四个列。 如果要显示为一系列在图表上绘制的每个季度的单张图表与销售,可以以使用下面的代码的 chPlotAggregatesSeries FALSE 和 PlotAllAggregates 设置 HasMultipleCharts : 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 ,您仍然必须只有一个图表,但是有一个系列,而不是四个。 图表类别有两个的级别: 在类别名称的一个级别字段和另一个级别的季度。 请按照下列水准的插图显示 chPlotAggregatesSeries 或 chPlotAggregatesCategories PlotAllAggregates 时数据的绘制方式之间的差异: 绑定与多个图表的 ChartSpace 通过使用上一节中的相同 ADO 记录集所述,您可以显示每个季度的销售的一个图表,如果要 chPlotAggregatesCharts 设置为 TRUE , PlotAllAggregates HasMultipleCharts 。 是代码的例如下面的结果是代码的每个图表包含单个系列 (一个结构图的季度 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") 当通过 PlotAllAggregates 在设置为 chPlotAggregatesCharts ,字段 (或合计) 绑定的数据源始终创建 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" 结果是有两个图表上绘制的所有数据系列的图表。 第一张图表包含的系列第四个季度销售增加,第二个图表包含第四个季度销售减少了该系列。 下面的插图代表创建的图表: SetData 方法使用绑定的图表 OWC 10 的对象模型、 在 ChartSpace、 一个的图表和一系列中所有公开 SetData 方法。 在 ChartSpace 绑定到数据源中时, 您只能使用 ChartSpace 对象在 SetData 方法从绑定的数据源添加数据系列或值。 如果尝试使用 SetData 图表或已因绑定创建一系列您可能会收到以下运行时错误之一: 运行时错误-2147467259 (80004005): 方法 SetData 的对象 ChChart 失败。 运行时错误-2147467259 (80004005): 方法 SetData 的对象 ChSeries 失败。
数据绑定图表的一般原则是 SetData 方法可应用到的各个图表或数据系列 如果 图表或系列通过添加到该 ChartSpace 使用 Add 方法 和 加载文本数据 (逗号分隔的字符串或数组) 添加图表或数据系列。 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 销售额将每个图表,然后加载该新系列的文本的数据的其他系列: 演示 下面的示例演示绑定到记录集所得到的示例访问 Northwind 数据库中的图表。 您可以三种方式之一创建记录集: - 使用 ADO 记录集。
- 使用 ConnectionString 属性和 ChartSpace 对象的 CommandText 属性。
- 使用 Office DataSourceControl (DSC)。
图表的结果是相同的数据源而不考虑的键入选择。 图表所绑定到数据源后,绑定的数据绘制显示每个如何影响在生成的图表和在 ChartSpace 中的数据系列使用 HasMultipleCharts 属性,该 PlotAllAggregates 属性和 SetData 方法的不同组合。 - 将以下 HTML 代码复制到文本编辑器,然后将其保存为 BoundChart.htm 。 如有必要,您可以修改为 连接 函数中 sConn 变量分配,以便 Northwind.mdb 的路径匹配您的 Office 安装。
请注意 以下代码使用 DataSourceControl 对象 10.0 和 ChartSpace 对象 10.0 对。 Office System 2003 版的 DataSourceControl 对象和 ChartSpace 对象,必须将替换在 clsid 的每个值与 Office Web 组件 2003 的版本分别。
DataSourceControl 对象 11.0 对该程序标识符是 CLSID:CLSID:0002E55B-0000-0000-C000-000000000046。
ChartSpace 对象 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:   
<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> - 启动 Internet Explorer,然后将移动到 BoundChart.htm。
- 单击检查每个不同的图表组合的网页上的每个按钮。
请注意 您还可以选择不同的数据源类型。 生成的图表是无论您选择的数据源类型相同的。
有关使用 Office Web 组件,请访问下面的 Microsoft 网站: 有关 Office 开发人员中心请访问下面的 Microsoft Web 站点: 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应: 286320?
(http://support.microsoft.com/kb/286320/
)
如何绑定 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和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。 | |