<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Alex Gorev's Weblog</title><link>http://blogs.msdn.com/alexgor/default.aspx</link><description>Data Visualization</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Setting Microsoft Chart Series Colors</title><link>http://blogs.msdn.com/alexgor/archive/2009/10/06/setting-chart-series-colors.aspx</link><pubDate>Tue, 06 Oct 2009 07:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9903603</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9903603.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9903603</wfw:commentRss><description>&lt;P&gt;Microsoft Chart control provides different ways to set color of the series and data points:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Palettes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Selecting one of the predefined palettes is the easiest way to change chart series colors. There are 12 built-in palettes with about 10 unique colors each.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/SettingChartSeriesColors_7C0/ChartPalettes_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/SettingChartSeriesColors_7C0/ChartPalettes_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=ChartPalettes border=0 alt=ChartPalettes src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/SettingChartSeriesColors_7C0/ChartPalettes_thumb.png" width=713 height=336 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/SettingChartSeriesColors_7C0/ChartPalettes_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Chart types like column and line, will assign a unique color from the palette to each of the series. If chart runs out of the palette colors then it will start reusing them again.&amp;nbsp; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008000&gt;// Set chart series palette&lt;/FONT&gt;
Chart.Palette = ChartColorPalette.Pastel;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Chart type like Pie, assigns unique colors to each individual data point. You can still use &lt;STRONG&gt;Chart.Palette&lt;/STRONG&gt; property or you can define different palettes for different series using &lt;STRONG&gt;Series.Palette&lt;/STRONG&gt; property. Note that setting Series.Palette property will force all chart types including Column to use unique colors for each data point.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Important! &lt;/STRONG&gt;To determine the color assigned to the series or data point from the palette you can call &lt;STRONG&gt;chart1.ApplyPaletteColors() &lt;/STRONG&gt;method and then check Series or DataPoint.Color property.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Custom Palettes&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If none of the predefined palettes fits your needs, you can always create custom palette with as many colors as you need:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008000&gt;// Set chart custom palette&lt;/FONT&gt;
Chart.Palette = ChartColorPalette.None; &lt;BR&gt;Chart.PaletteCustomColors = new Color[] { Color.Red, Color.Blue, Color.Yellow};&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Empty points&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Not all series data points are equal… When you data bind your chart to the DBNull values the data points will be automatically marked as ‘empty’. You can also mark data points as empty by setting &lt;STRONG&gt;DataPoint.IsEmpty&lt;/STRONG&gt; property. Each empty data point uses the visual attributes defined in &lt;STRONG&gt;Series.EmptyPointStyle&lt;/STRONG&gt; property. &lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008000&gt;// Hide all series empty data point by making them transparent&lt;/FONT&gt;
Chart.Series[0].EmptyPointStyle.Color = Color.Transparent; &lt;BR&gt;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Color Property&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;If all of the above methods does not work for you, then you can always set &lt;STRONG&gt;Color&lt;/STRONG&gt; property for the series or individual data point.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;&lt;FONT color=#008000&gt;// Set color for the whole series&lt;/FONT&gt;
Chart.Series[0].Color = Color.Green;

&lt;FONT color=#008000&gt;// Set color of a single data point&lt;/FONT&gt;
Chart.Series[0].Points[5].Color = Color.Red;&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You can always switch back to using the palette colors by setting both Series and DataPoint Color properties to Color.Empty.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9903603" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item><item><title>MS Chart Layout Helper</title><link>http://blogs.msdn.com/alexgor/archive/2009/07/27/dynamic-chart-elements-layout-helper.aspx</link><pubDate>Mon, 27 Jul 2009 04:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9849539</guid><dc:creator>alexgor</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9849539.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9849539</wfw:commentRss><description>&lt;P&gt;MS Chart consists of different elements (like titles, legends, chart areas, …) which all share the same space in the chart. It is easy to make a ‘perfect’ layout of these elements when you know exactly how many you will have and what size they going to be. It can be challenging when the content of these elements is dynamic and their size may change significantly. Today we will discuss how we can improve different aspects of the Chart elements layout.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Examples&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;First of all, let’s start by looking at several different charts before (left) and after (right) we applied our layout improvement rules.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Example 1: Legend position was changed from Bottom to Right and its’ width was truncated.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_1%5B1%5D_4.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_1%5B1%5D_4.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image_thumb_1[1] border=0 alt=image_thumb_1[1] src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_1%5B1%5D_thumb_1.png" width=640 height=161 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_1%5B1%5D_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Sample 2: Title font was reduced and legend position switched from Bottom to Right.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_2%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_2%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image_thumb_2[1] border=0 alt=image_thumb_2[1] src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_2%5B1%5D_thumb.png" width=640 height=171 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_2%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Sample 3: Vertical axis labels were limited to 30% of the chart width.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image_thumb[1] border=0 alt=image_thumb[1] src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb%5B1%5D_thumb.png" width=640 height=203 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Sample 4: Bottom axis long labels are truncated and vertical axis labels are shown in thousands.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_3%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_3%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image_thumb_3[1] border=0 alt=image_thumb_3[1] src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_3%5B1%5D_thumb.png" width=640 height=501 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_3%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Sample 5: Labels are shown only for the largest 7 slices in the Pie.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_4%5B1%5D_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_4%5B1%5D_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image_thumb_4[1] border=0 alt=image_thumb_4[1] src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_4%5B1%5D_thumb.png" width=640 height=290 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DynamicChartElementsLayoutHelper_103E2/image_thumb_4%5B1%5D_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Legend&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The most common issue with the Legend, is that it can take significant amount of chart space and can make the actual chart data difficult to read. Here are things that can improve legend layout: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Legend is docked depending on the proportions of the chart so that it takes advantage of the available space. For example, if we have a wide chart, it is better to dock legend on the Right than on the Bottom of the chart. &lt;/LI&gt;
&lt;LI&gt;Limit space available to the legend to 30% of the total chart space. Legend will be trimmed if its’ content exceeds 30% of the chart size. &lt;/LI&gt;
&lt;LI&gt;Hide legend when chart becomes too small. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Title&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;If chart title content depends on the dynamic data, its’ size can grow unpredictably and interfere with the data we are trying to shown in the chart. This is very similar with the Legend issues described above.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Limit space available to the title to 20% of the total chart space. If title exceeds 20%, we will try to reduce its’ font size and then truncate the content. &lt;/LI&gt;
&lt;LI&gt;Hide title when chart becomes too small. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Axis Labels&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;A single very long label can make chart very hard to read. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Limit maximum size available to the axis labels to 30% of the chart size. If labels can not fit their content will be automatically truncated. &lt;/LI&gt;
&lt;LI&gt;Use multipliers for showing values in thousands, millions, billions,… Instead of showing a very long axis label like this ‘50,000,000.00’, you can display ‘50’ and add ‘(in millions)’ to the axis title. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Pie Labels&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Pie chart type is not the best visualization if you need to display many (&amp;gt;10) data points. It is hard to read and if you enable data point labels, there is a high chance that they will start overlapping. If you have to us the Pie chart it makes sense to show labels only for the largest slices in the pie.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Only display labels for the largest 7 slices in the Pie or Doughnut chart. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;How to use?&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;All these rules are implemented and can be automatically applied using &lt;STRONG&gt;ChartLayoutUtilities&lt;/STRONG&gt; add-on. Attached project contains ChartLayoutUtilities class and a sample Web Form. Just create an instance of this call passing reference to the chart control!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9849539" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/alexgor/attachment/9849539.ashx" length="28410" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item><item><title>Displaying Categorical Axis Labels.</title><link>http://blogs.msdn.com/alexgor/archive/2009/03/27/displaying-categorical-axis-labels.aspx</link><pubDate>Fri, 27 Mar 2009 20:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9514662</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9514662.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9514662</wfw:commentRss><description>&lt;P&gt;In this post I will discuss labeling of the categorical axes in SQL Reporting Services (SSRS) and .NET Chart controls. Same engine is used between these two products and they have exactly the same behavior. You can find detailed steps and sample code at the end of the post.&lt;/P&gt;
&lt;P&gt;Before we start, lets have a look how automatic chart axis labels work... When you data bind your chart, axis automatically calculates data scale and sets axis Minimum and Maximum values. Based on the axis scale, chart determines axis labels text, interval (how often labels are shown), font size and label rotation, so that labels do not overlap each other. Below you can see a simple chart with categorical values (countries) shown on the bottom axis:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=258 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_1.png" width=426 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As you can see, there is not enough space to show all the labels and chart only displays every other country. For categorical axis it is important to show as many categories as possible and here are few different tricks which will help you achieving that. &lt;/P&gt;
&lt;H3&gt;Solution 1: Force chart axis to display every category.&lt;/H3&gt;
&lt;P&gt;Chart axis &lt;STRONG&gt;Interval&lt;/STRONG&gt; property allows you to provide your own custom interval for axis labels, grid lines and tick marks. Our first solution is to set this property to 1, which will force the chart to display every single category. As you can see on the chart below, every country will become visible and chart will automatically rotate labels to better fit them. If you are using Column chart type you can also switch to Bar chart type to avoid labels rotation.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=258 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_2.png" width=427 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_2.png"&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_18.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_18.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=257 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_8.png" width=426 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_8.png"&gt;&lt;/A&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This is a very simple approach but you should also be aware of the possible down sides. In case you have too many categories, labels auto-fit algorithm may not be able to completely avoid labels overlapping and they will be very hard to read. I simulated this by reducing our original chart width in half and as you can see it is very hard to read the labels. If we double number of data points (countries) it will be even harder to read this chart. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_16.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_16.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=259 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_7.png" width=239 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_7.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Solution 2: Enable Variable Count interval and set preferred labels appearance&lt;/H3&gt;
&lt;P&gt;Second solution keeps the axis Interval in automatic mode, so that in extreme cases we can still reduce number of labels on the axis. First step is to disable labels auto fitting and specify the preferred font size and rotation. In our case we are trying to fit as much labels as possible, so we will set axis labels rotation angle to 90 degrees. And the last step is to enable Variable Interval calculation mode on the axis. By default, chart displays about 5 labels on the axis no matter how long it is, Variable Interval mode will allow you display as many labels as we can fit into the axis. After all this changes you should see something very similar to the Solution 1 chart:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_10.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=258 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_4.png" width=427 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_4.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Now let's try to reduce the size of the chart and see what will be different... As you can see in the image below, when chart cannot fit more vertically oriented labels it starts skipping them to avoid making chart completely unreadable.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_14.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=258 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_6.png" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingCategoricalAxisLabels_7494/image_thumb_6.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Conclusion&lt;/H3&gt;
&lt;P&gt;When categories are displayed on the axis, there is no grantee that all of them will be shown. You can set axis interval to 1 if it is extremely important to see every category but keep in mind that labels may overlap if there are too many categories. Use Variable Interval and labels rotation if you want to fit as many labels as possible and still have labels skipping in extreme cases.&lt;/P&gt;
&lt;H3&gt;SSRS Steps&lt;/H3&gt;
&lt;P&gt;Steps to apply Solution 1: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- Right click on the bottom axis and choose &lt;STRONG&gt;Axis Properties &lt;/STRONG&gt;from the context menu&lt;/P&gt;
&lt;P&gt;- Set &lt;STRONG&gt;Interval&lt;/STRONG&gt; field to &lt;STRONG&gt;1&lt;/STRONG&gt; in the &lt;STRONG&gt;Axis Options&lt;/STRONG&gt; property page&lt;/P&gt;
&lt;P&gt;- Press &lt;STRONG&gt;Ok&lt;/STRONG&gt; to close property dialog&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Steps to apply Solution 2: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;- Make sure Properties View is enabled&lt;/P&gt;
&lt;P&gt;- Click on the axis to select it and display it's properties in the Properties View&lt;/P&gt;
&lt;P&gt;- Set &lt;STRONG&gt;VariableAutoInterval&lt;/STRONG&gt; property to &lt;STRONG&gt;True&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;Set &lt;STRONG&gt;LabelsAngle&lt;/STRONG&gt; property to &lt;STRONG&gt;90&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;- &lt;/STRONG&gt;Click &lt;STRONG&gt;Yes&lt;/STRONG&gt; on the pop-up dialog to labels disable auto fitting&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;.NET Chart Sample Code&lt;/H3&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Solution 1: Setting axis Interval &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;this&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;.Chart1.ChartAreas[0].AxisX.Interval = 1;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Solution 2: Enable variable interval &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;this&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;.Chart1.ChartAreas[0].AxisX.Interval = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;double&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;.NaN;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;this&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;.Chart1.ChartAreas[0].AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;this&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;.Chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 90; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9514662" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Reporting+Services/default.aspx">Reporting Services</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/SSRS/default.aspx">SSRS</category></item><item><title>Aligning Multiple Series with Categorical Values</title><link>http://blogs.msdn.com/alexgor/archive/2009/03/27/aligning-multiple-series-with-categorical-values.aspx</link><pubDate>Fri, 27 Mar 2009 07:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9512979</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9512979.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9512979</wfw:commentRss><description>&lt;H3&gt;Binding Categorical Data Overview&lt;/H3&gt;
&lt;P&gt;Binding chart to the data source with categorical values is pretty simple and usually requires just one line of code:&lt;/P&gt;&amp;nbsp;&amp;nbsp; 
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;Chart1.Series[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Series1"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].Points.DataBind(mySource, &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"ProductName"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;, &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Sales"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;);&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;It is important to understand that after &lt;STRONG&gt;DataBind&lt;/STRONG&gt; method creates series DataPoint objects, their &lt;STRONG&gt;XValue&lt;/STRONG&gt; property will always be set to zero and category is saved in the &lt;STRONG&gt;AxisLabel&lt;/STRONG&gt; property. Position of each data point along the category axis is determined using the index of the object in &lt;STRONG&gt;Series.Points&lt;/STRONG&gt; collection. Below is an example of what your chart may look like:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=246 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_thumb.jpg" width=490 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;H3&gt;Alignment of Multiple Series&lt;/H3&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image002_2.jpg"&gt;&lt;/A&gt;
&lt;P&gt;When you bind multiple series with categorical values you may run into some un-expected results based on how you prepare your data source. For example, let's imagine that our two chart series are bound to this data:&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=400 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;&lt;STRONG&gt;Series 1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;&lt;STRONG&gt;Series 2&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product A = 320&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product B = 420&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product B = 580&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product E = 830&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product C = 980&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product E = 100&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product F = 220&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;As you can notice, we have less categories for the second series and their order does not match categories from the first series. If we try binding chart to this data we will end up with the chart shown below. Chart uses index of the data point to position them along the axis and we end up with orange series points in the wrong position. I added data point labels so that it would easier to see the issue.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image004_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=246 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image004_thumb.jpg" width=490 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image004_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;In order to resolve this we can modify our data source to contain same number of categories in the same order like this:&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=400 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;&lt;STRONG&gt;Series 1&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;&lt;STRONG&gt;Series 2&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product A = 320&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product A = Null&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product B = 580&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product B = 420&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product C = 980&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product C = Null&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product E = 100&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product E = 830&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=199&gt;Product F = 220&lt;/TD&gt;
&lt;TD class="" vAlign=top width=199&gt;Product F = Null&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;Simpler approach is just to make a single call to &lt;STRONG&gt;Chart.AlignDataPointsByAxisLabel&lt;/STRONG&gt; method which will automatically align the two series by inserting empty points and the end result will look like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image006_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image006_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=246 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image006_thumb.jpg" width=490 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DisplayingMultipleSerieswithCategoricalV_12CBF/clip_image006_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Hope this helps!&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9512979" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item><item><title>Charting With ASP.NET and LINQ</title><link>http://blogs.msdn.com/alexgor/archive/2009/03/06/charting-with-asp-net-and-linq.aspx</link><pubDate>Fri, 06 Mar 2009 20:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9463178</guid><dc:creator>alexgor</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9463178.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9463178</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ChartingWithASP.NETandLINQ_8992/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ChartingWithASP.NETandLINQ_8992/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 5px 20px 0px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=71 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ChartingWithASP.NETandLINQ_8992/image_thumb.png" width=139 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ChartingWithASP.NETandLINQ_8992/image_thumb.png"&gt;&lt;/A&gt; Check out the new MSDN article about how to use ASP.NET Chart control with LINQ by K. Scott Allen: &lt;A title=http://msdn.microsoft.com/en-us/magazine/dd453008.aspx href="http://msdn.microsoft.com/en-us/magazine/dd453008.aspx" mce_href="http://msdn.microsoft.com/en-us/magazine/dd453008.aspx"&gt;http://msdn.microsoft.com/en-us/magazine/dd453008.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9463178" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/MSDN/default.aspx">MSDN</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Deploying Microsoft Chart Controls</title><link>http://blogs.msdn.com/alexgor/archive/2009/02/27/deploying-microsoft-chart-controls.aspx</link><pubDate>Fri, 27 Feb 2009 21:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9449371</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9449371.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9449371</wfw:commentRss><description>&lt;P&gt;&lt;EM&gt;MSChart.exe &lt;/EM&gt;setup should be used to deploy Microsoft Chart controls but what exactly need to be done to create a deployment package in Visual Studio? Visual Studio provides an easy way to add the prerequisites using &lt;EM&gt;bootstrappers, &lt;/EM&gt;and thanks to Phil Preen, now we have a detailed instructions on how to create and use .NET Chart Control bootstrapper. &lt;/P&gt;
&lt;P&gt;You can find his article here: &lt;A title=http://www.philpreen.co.uk/MSChart/ href="http://www.philpreen.co.uk/MSChart/" mce_href="http://www.philpreen.co.uk/MSChart/"&gt;http://www.philpreen.co.uk/MSChart/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9449371" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Bootstrapper/default.aspx">Bootstrapper</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Deployment/default.aspx">Deployment</category></item><item><title>Data Binding Microsoft Chart Control</title><link>http://blogs.msdn.com/alexgor/archive/2009/02/21/data-binding-ms-chart-control.aspx</link><pubDate>Sat, 21 Feb 2009 05:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9436859</guid><dc:creator>alexgor</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9436859.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9436859</wfw:commentRss><description>&lt;H3&gt;Overview&lt;/H3&gt;
&lt;P&gt;When you add a new visualization in your application, the very first thing you do, is bind it to the data. Microsoft Chart control allows many different ways of populating data in the chart and it is important to understand the differences between them and being able to choose the best approach. I put together all the possible data binding options and the scenarios when they should be used.&lt;/P&gt;
&lt;H3&gt;Data Sources&lt;/H3&gt;
&lt;P&gt;Before jumping into the binding methods I want to quickly list all the supportable data sources which can be used in chart binding methods. Keep in mind that not all methods accept all source types.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SqlCommand&lt;/LI&gt;
&lt;LI&gt;OleDbCommand&lt;/LI&gt;
&lt;LI&gt;SqlDataAdapter&lt;/LI&gt;
&lt;LI&gt;OleDbDataAdapter&lt;/LI&gt;
&lt;LI&gt;DataView&lt;/LI&gt;
&lt;LI&gt;DataSet&lt;/LI&gt;
&lt;LI&gt;DataReader&lt;/LI&gt;
&lt;LI&gt;List&lt;/LI&gt;
&lt;LI&gt;Array&lt;/LI&gt;
&lt;LI&gt;IList&lt;/LI&gt;
&lt;LI&gt;IListSource&lt;/LI&gt;
&lt;LI&gt;IEnumerable&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Data Point X and Y values&lt;/H3&gt;
&lt;P&gt;When you bind chart you create series and series data points. Each data point in the series should have it's Y value set and in addition to the Y value you can also bind or set other data point properties:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;X Value&lt;/STRONG&gt; - Defines location of the data point along X axis. If not specified, data point index in the series will be used. &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Additional Y Values&lt;/STRONG&gt; - Chart types like Bubble or Stock require multiple Y values. You can also bind additional Y values in the regular chart types, if you want to use those values for labels or tooltips.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Category&lt;/STRONG&gt; - When you displaying categories on the X axis, they are stored in the AxisLabel property of the data point. All data binding methods will automatically detect the type of the data and you should not worry about it.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Other Properties&lt;/STRONG&gt; - Some of the binding methods allow you to set additional properties like data point labels, tooltips and others.&lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Binding Options Overview&lt;/H3&gt;
&lt;P&gt;This table lists data binding techniques, starting from the most basic methods proceeding to more advanced. &lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=6 width=710 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=169&gt;
&lt;P&gt;&lt;STRONG&gt;Chart.DataBindTable&lt;/STRONG&gt; &lt;BR&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=267&gt;
&lt;UL&gt;
&lt;LI&gt;Simple binding for X and Y values.&lt;/LI&gt;
&lt;LI&gt;Automatic series creation, based on the number of columns in the data source.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=271&gt;
&lt;UL&gt;
&lt;LI&gt;No multiple Y values per series.&lt;/LI&gt;
&lt;LI&gt;All series have same X value, or it is not set.&lt;/LI&gt;
&lt;LI&gt;No binding for extended chart properties like tooltips.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=170&gt;
&lt;P&gt;&lt;STRONG&gt;Chart.DataSource and Chart.DataBind&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=267&gt;
&lt;UL&gt;
&lt;LI&gt;Can be used at design-time.&lt;/LI&gt;
&lt;LI&gt;Supports multiple Y values.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=271&gt;
&lt;UL&gt;
&lt;LI&gt;No binding for extended chart properties like tooltips. &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;
&lt;P&gt;&lt;STRONG&gt;Points.DataBind(X)Y&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=267&gt;
&lt;UL&gt;
&lt;LI&gt;Supports multiple data sources, including separate data source for X and Y values.&lt;/LI&gt;
&lt;LI&gt;Supports multiple Y values.&lt;/LI&gt;
&lt;LI&gt;Provides more flexibility than methods above&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=271&gt;
&lt;UL&gt;
&lt;LI&gt;No binding for extended chart properties like tooltips. &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=172&gt;
&lt;P&gt;&lt;STRONG&gt;Points.DataBind&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=267&gt;
&lt;UL&gt;
&lt;LI&gt;Same as the above, plus:&lt;/LI&gt;
&lt;LI&gt;Supports binding for extended chart properties like tooltips.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=271&gt;
&lt;UL&gt;
&lt;LI&gt;Does not support different data sources for X and Y values of a series. &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=173&gt;
&lt;P&gt;&lt;STRONG&gt;Chart.DataBindCrossTab&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=267&gt;
&lt;UL&gt;
&lt;LI&gt;Automatically creates series for each unique value in specified column used to group the data.&lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class="" vAlign=top width=271&gt;
&lt;UL&gt;
&lt;LI&gt;Only single level grouping is supported. &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H3&gt;Binding Options Details&lt;/H3&gt;
&lt;BLOCKQUOTE&gt;
&lt;H4&gt;Chart.DataBindTable method&lt;/H4&gt;
&lt;P&gt;The Chart.DataBindTable method is the simplest way to bind chart to a table with several columns. New series will be automatically created for each of the columns and you can optionally use one column for the X value for all series.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Imagine you have a data source containing these columns: Prod A, Prod B, Prod C, Prod D, Prod E, Other and SalesName, you can easily create chart below with a single line of code:&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 427px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 45px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;Chart1.DataBindTable(myReader, &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"SalesName"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;); &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;BR&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=300 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb.png" width=400 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;Chart.DataSource property&lt;/H4&gt;
&lt;P&gt;Chart &lt;STRONG&gt;DataSource&lt;/STRONG&gt; property is the only way to bind chart at design-time. In addition to specifying the DataSource property you also need to create series and set their &lt;STRONG&gt;YValueMembers&lt;/STRONG&gt; and optionally &lt;STRONG&gt;XValueMember&lt;/STRONG&gt; properties. Multiple Y values can be bound if you specify comma separated list of members in the YValueMembers property.&lt;/P&gt;
&lt;P&gt;Chart will automatically bind itself to specified data source and members just before rendering. You can force chart to bind at any moment by calling &lt;STRONG&gt;Chart.DataBind() &lt;/STRONG&gt;method.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 450px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 150px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Set chart data source &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;chart1.DataSource = myCommand; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Set series members names for the X and Y values &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;chart1.Series[&lt;SPAN style="COLOR: blue"&gt;"Series 1"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].XValueMember = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Name"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;chart1.Series[&lt;SPAN style="COLOR: blue"&gt;"Series 1"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].YValueMembers = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Sales"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Data bind to the selected data source &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;chart1.DataBind(); &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;DataBindCrossTab&lt;/H4&gt;
&lt;P&gt;The Chart.DataBindCrossTab is different compared to all other binding methods, in that it allows for the &lt;A&gt;grouping&lt;/A&gt; of unique values in a column. Each unique value in the specified grouped column results in the creation of a data series. In addition, extended data point properties other than X and Y values can be bound.&lt;/P&gt;
&lt;P&gt;These other properties are bound using the &lt;EM&gt;otherFields&lt;/EM&gt; parameter using this syntax:&lt;/P&gt;&lt;PRE&gt;PointProperty=Field[{Format}] [,PointProperty= Field[{Format}]].&lt;/PRE&gt;
&lt;P&gt;A list of these properties are as follows: &lt;STRONG&gt;AxisLabel&lt;/STRONG&gt;, &lt;STRONG&gt;Tooltip&lt;/STRONG&gt;, &lt;STRONG&gt;Label&lt;/STRONG&gt;,&amp;nbsp; &lt;STRONG&gt;LegendText&lt;/STRONG&gt;,&amp;nbsp; &lt;STRONG&gt;LegendTooltip&lt;/STRONG&gt; and &lt;STRONG&gt;CustomPropertyName&lt;/STRONG&gt; (the name of a custom property). For more information on possible formats see the &lt;STRONG&gt;Formatting Types&lt;/STRONG&gt; topic in the MSDN library.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;In the sample below we have a table that has the sales and commissions of sales people for three years. We group by the "Name" column, thereby creating one data series per sales person. The X values are bound to the "Year" column, the Y values are bound to the "Sales" column, the Label property of the resulting data points (one per record) is bound to the "Commissions" column, and the LegendText property is bound to the "Name" column.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=181 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb_1.png" width=408 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=300 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb_2.png" width=400 border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/DataBindingMSChartcontrol_10712/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 621px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 78px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Group by "Name" column, bind X values to "Year", Y values to "Sales", &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// and Label property to "Commissions. &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;chart1.DataBindCrossTab(myReader, "Name&lt;SPAN style="COLOR: blue"&gt;", "&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;Year&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;", "&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;Sales&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;", "&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;Label=Commissions"); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;Points.DataBind&lt;/H4&gt;
&lt;P&gt;This method allows for data point properties other than X and Y values to be bound to data columns. For example, you want to set data point label to a value in one of the data source columns. These other properties are bound using the &lt;EM&gt;otherFields&lt;/EM&gt; parameter using this syntax:&lt;/P&gt;&lt;PRE&gt;PointProperty=FieldName[{Format}][,PointProperty= FieldName[{Format}]]&lt;/PRE&gt;
&lt;P&gt;A list of these properties includes: &lt;STRONG&gt;AxisLabel&lt;/STRONG&gt;, &lt;STRONG&gt;Tooltip&lt;/STRONG&gt;, &lt;STRONG&gt;Label&lt;/STRONG&gt;,&amp;nbsp; &lt;STRONG&gt;LegendText&lt;/STRONG&gt;,&amp;nbsp; &lt;STRONG&gt;LegendTooltip&lt;/STRONG&gt; and &lt;STRONG&gt;CustomPropertyName&lt;/STRONG&gt; (the name of a custom property).&lt;/P&gt;
&lt;P&gt;This method does not allow you to specify separate data sources for the X and Y values of a series (for this functionality use the &lt;STRONG&gt;DataBind(X)Y&lt;/STRONG&gt; methods described in the section above). &lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Code below demonstrates how to bind X and Y values of the series to columns "Name" and "Sales" respectively. The &lt;STRONG&gt;Label&lt;/STRONG&gt; and &lt;STRONG&gt;Tooltip&lt;/STRONG&gt; properties of the resulting data points are also bound to the "Commissions" and "Year" column. &lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 527px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 71px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;Chart1.Series[&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Series1"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].Points.DataBind( &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;myReader, &lt;SPAN style="COLOR: blue"&gt;"Name"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;, &lt;SPAN style="COLOR: blue"&gt;"Sales"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;, &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Tooltip=Year, Label=Commissions{C2}"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;H4&gt;&amp;nbsp;&lt;/H4&gt;
&lt;H4&gt;Points.DataBind[X]Y&lt;/H4&gt;
&lt;P&gt;The DataBindXY method allows for the binding of X and Y values of a series, while DataBindY binds Y values only. When binding X and Y values using &lt;STRONG&gt;DataBindXY&lt;/STRONG&gt; the same or different data sources may be used.&lt;/P&gt;
&lt;P&gt;Some data sources support multiple values (e.g. data sources that have columns of data). For example, &lt;STRONG&gt;OleDbDataReader&lt;/STRONG&gt; may have access to more than one column of data. If the column to be used is not specified, then the first available column will be used. To use a column other than the first one just specify the column name in the method call.&lt;/P&gt;
&lt;P&gt;Note that when specifying the column names to be bound to the Y values a comma can be embedded as part of a column name by specifying a double comma.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Code below demonstrates how to bind series points to the array of doubles.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 545px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 108px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Initialize an array of doubles. &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;double&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; [] array = { 2.8, 4.4, 6.5, 8.3, 3.6, 5.6, 7.3, 9.2, 1.0}; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Bind the double array to the Y axis points of the data series. &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Chart1.Series[&lt;SPAN style="COLOR: blue"&gt;"Series1"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].Points.DataBindY(array); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;H4&gt;'Manual' series population&lt;/H4&gt;
&lt;P&gt;In case you need to perform some custom actions while binding and none of the above methods works, you can always 'manually' bind chart by iterating through the data source and add data points to the series as needed. This approach is also very useful when series data is calculated using some formula.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Example&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 699px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 727px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: green"&gt;// Resolve the address to the Access database &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; fileNameString = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;.MapPath(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"."&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;fileNameString += &lt;SPAN style="COLOR: blue"&gt;"..\\..\\..\\data\\chartdata.mdb"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: green"&gt;// Initialize a connection string &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; myConnectionString = &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source="&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; + fileNameString; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Define the database query &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; mySelectQuery=&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"SELECT * FROM SALESCOUNTS;"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: green"&gt;// Create a database connection object using the connection string &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;OleDbConnection myConnection = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; OleDbConnection(myConnectionString); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Create a database command on the connection using query &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;OleDbCommand myCommand = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; OleDbCommand(mySelectQuery, myConnection); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: green"&gt;// Open the connection &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;myCommand.Connection.Open(); &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Initializes a new instance of the OleDbDataAdapter class &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;OleDbDataAdapter myDataAdapter = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; OleDbDataAdapter(); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;myDataAdapter.SelectCommand = myCommand; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// Initializes a new instance of the DataSet class &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;DataSet myDataSet = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; DataSet(); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: green"&gt;// Adds rows in the DataSet &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;myDataAdapter.Fill(myDataSet, &lt;SPAN style="COLOR: blue"&gt;"Query"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;foreach&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;(DataRow row &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; myDataSet.Tables[&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Query"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].Rows) &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;{ &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;&amp;nbsp;&amp;nbsp; // For each Row add a new series &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; seriesName = row[&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"SalesRep"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].ToString(); &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&amp;nbsp; Chart1.Series.Add(seriesName); &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp; Chart1.Series[seriesName].ChartType = SeriesChartType.Line; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&amp;nbsp; Chart1.Series[seriesName].BorderWidth = 2; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp; for&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; colIndex = 1; colIndex &amp;lt; myDataSet.Tables[&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Query"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].Columns.Count; colIndex++) &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp; { &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // For each column (column 1 and onward) add the value as a point &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; columnName = myDataSet.Tables[&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;"Query"&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;].Columns[colIndex].ColumnName; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt; YVal = (&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;) row[columnName]; &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Chart1.Series[seriesName].Points.AddXY(columnName, YVal); &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp; } &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;} &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;DataGrid.DataSource = myDataSet; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;DataGrid.DataBind(); &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;SPAN style="COLOR: green"&gt;// Closes the connection to the data source. This is the preferred &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;SPAN style="COLOR: green"&gt;// method of closing any open connection. &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11px"&gt;&lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;myCommand.Connection.Close(); &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;H3&gt;Other useful things to know&lt;/H3&gt;
&lt;P&gt;Here are couple things that you should know about when binding chart:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Empty Points&lt;/STRONG&gt; - Understand what empty points are and how you can use them. Right now the best source of the information is Chart Sample Environment but I will blog about it later.&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;AlignDataPointsByAxisLabel&lt;/STRONG&gt; - If you are using a stacked chart type with categorical X axis this helper method can be very useful. Find more information in the documentation and Chart Sample Environment.&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9436859" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Data+Binding/default.aspx">Data Binding</category></item><item><title>ASP.NET Connections 2009</title><link>http://blogs.msdn.com/alexgor/archive/2009/02/20/asp-net-connections-2009.aspx</link><pubDate>Fri, 20 Feb 2009 09:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9435558</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9435558.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9435558</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ASP.NETConnections2009_140CE/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ASP.NETConnections2009_140CE/image_6.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN: 0px 20px 5px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=87 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ASP.NETConnections2009_140CE/image_thumb_2.png" width=176 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/ASP.NETConnections2009_140CE/image_thumb_2.png"&gt;&lt;/A&gt;Have a question about the ASP.NET chart control? Want to meet and discuss the future visualization roadmap? I will be at the ASP.NET Connections March 22-25. See you there!&lt;/P&gt;
&lt;P&gt;&lt;A title=http://www.devconnections.com/ href="http://www.devconnections.com/" mce_href="http://www.devconnections.com/"&gt;http://www.devconnections.com/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9435558" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/DevConnections/default.aspx">DevConnections</category></item><item><title>Using Chart HTTP Handler</title><link>http://blogs.msdn.com/alexgor/archive/2009/01/12/using-chart-http-handler.aspx</link><pubDate>Mon, 12 Jan 2009 22:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9309559</guid><dc:creator>alexgor</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9309559.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9309559</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/UsingChartHTTPHandler_A7C9/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/UsingChartHTTPHandler_A7C9/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 10px 20px 10px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=78 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/UsingChartHTTPHandler_A7C9/image_thumb_1.png" width=239 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/UsingChartHTTPHandler_A7C9/image_thumb_1.png"&gt;&lt;/A&gt; Delian Tchoparinov just posted on his &lt;A href="http://blogs.msdn.com/deliant" target=_blank mce_href="http://blogs.msdn.com/deliant"&gt;blog&lt;/A&gt; about chart image rendering using Chart HTTP Handlers. This is very useful reading for everybody using the ASP.NET version of the Microsoft Chart control. You can find this post &lt;A href="http://blogs.msdn.com/deliant/archive/2008/12/02/managing-chart-generated-images-with-chart-image-handler.aspx" target=_blank mce_href="http://blogs.msdn.com/deliant/archive/2008/12/02/managing-chart-generated-images-with-chart-image-handler.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9309559" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/HTTP+Handler/default.aspx">HTTP Handler</category></item><item><title>Chart SharePoint Web Part</title><link>http://blogs.msdn.com/alexgor/archive/2008/12/04/chart-sharepoint-web-part.aspx</link><pubDate>Thu, 04 Dec 2008 18:49:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9175657</guid><dc:creator>alexgor</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9175657.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9175657</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN: 0px 20px 10px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=99 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_thumb.png" width=244 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can easily create charting SharePoint Web Part using new &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=en"&gt;Microsoft Chart Control&lt;/A&gt;. Wictor Wilen created a "&lt;A class="" href="http://www.codeplex.com/ChartPart" target=_blank mce_href="http://www.codeplex.com/ChartPart"&gt;ChartPart for SharePoint&lt;/A&gt;" project on Codeplex, which is a ready to use WebPart with source code. If you want to create your own WebPart also&amp;nbsp;check out&amp;nbsp;&lt;A class="" href="http://mosshowto.blogspot.com/2008/12/asp-net-chart-control-sharepoint.html" target=_blank mce_href="http://mosshowto.blogspot.com/2008/12/asp-net-chart-control-sharepoint.html"&gt;this tutorial&lt;/A&gt; created by Marc Charmois!&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9175657" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/WebPart/default.aspx">WebPart</category></item><item><title>Microsoft Chart Control How-to: Improve Chart Performance</title><link>http://blogs.msdn.com/alexgor/archive/2008/12/03/microsoft-chart-control-how-to-improve-chart-performance.aspx</link><pubDate>Wed, 03 Dec 2008 06:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9167949</guid><dc:creator>alexgor</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9167949.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9167949</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoImproveChartPe_10E22/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoImproveChartPe_10E22/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 15px 30px 15px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=71 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoImproveChartPe_10E22/image_thumb_1.png" width=75 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoImproveChartPe_10E22/image_thumb_1.png"&gt;&lt;/A&gt;There are several main areas that affect performance of the chart: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Data binding. &lt;/LI&gt;
&lt;LI&gt;Rendering of the chart visual elements. &lt;/LI&gt;
&lt;LI&gt;Streaming chart image from the server to the client. (&lt;EM&gt;ASP.NET only&lt;/EM&gt;) &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The following chart scenarios may have a major impact on performance and we going to discuss their affect in details below: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Large data sets &lt;/LI&gt;
&lt;LI&gt;Chart type used &lt;/LI&gt;
&lt;LI&gt;Data point tooltips &lt;/LI&gt;
&lt;LI&gt;Hyperlinks using the Url property &lt;/LI&gt;
&lt;LI&gt;Image size and type &lt;/LI&gt;
&lt;LI&gt;Border skins &lt;/LI&gt;
&lt;LI&gt;View state &lt;/LI&gt;&lt;/UL&gt;
&lt;H3&gt;Binding to Large Data Sets&lt;/H3&gt;
&lt;P&gt;When a chart is bound to a data set with over a 1000 data points, binding performance can take significant amount of time. &lt;/P&gt;
&lt;P&gt;To optimize chart performance, we recommend the following: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Optimize your query &lt;/LI&gt;
&lt;LI&gt;Avoid multiple passes through the data &lt;/LI&gt;&lt;/UL&gt;
&lt;H5&gt;Optimizing the query&lt;/H5&gt;
&lt;P&gt;Make sure you optimize the way you retrieve the data and that you only getting the data you need to display in the chart. You may consider grouping data to decrease total number of points. For example, if you display stock data for 5 years, instead of returning daily stock price you can aggregate it into the weekly price.&lt;/P&gt;
&lt;H5&gt;Avoid multiple passes through large data set&lt;/H5&gt;
&lt;P&gt;If you binding multiple series, make sure you are iterating the data source only once. Do not use &lt;STRONG&gt;DataBindXXX&lt;/STRONG&gt; methods for each of the series, because each of this calls will iterate through the data source. &lt;/P&gt;
&lt;P&gt;The best approach is to use &lt;STRONG&gt;DataBindCrossTab&lt;/STRONG&gt; method of the chart or 'manually' iterate once through the data source and add points in the chart using &lt;STRONG&gt;AddXY&lt;/STRONG&gt; method of &lt;STRONG&gt;DataPointCollection&lt;/STRONG&gt; object.&lt;/P&gt;
&lt;H3&gt;Spline vs. Line vs. FastLine Charts&lt;/H3&gt;
&lt;P&gt;Selection of the chart type if you have a significant amount of data points in the series will have a significant impact on the chart performance. &lt;/P&gt;
&lt;P&gt;For example, Spline charts are known to degrade performance, since they are actually calculated areas. This means that they require a great deal of calculation in order to be drawn, especially in 3D mode. The necessary calculations, and processing are being done by the GDI+ engine. &lt;/P&gt;
&lt;P&gt;For optimal performance, we recommend avoiding spline-type charts if possible. Try using another chart type, such as a line chart instead.&lt;/P&gt;
&lt;P&gt;In cases when you need to draw more than 100,000 data points you may also consider using &lt;STRONG&gt;FastLine&lt;/STRONG&gt; and &lt;STRONG&gt;FastPoint&lt;/STRONG&gt; chart types. They do not support all the features of the regular Line and Point chart but will &lt;STRONG&gt;SIGNIFICANTLY&lt;/STRONG&gt; improve chart performance.&lt;/P&gt;
&lt;H3&gt;Tooltips&lt;/H3&gt;
&lt;P&gt;If there are numerous chart series data points, displaying them using the Tooltip property will seriously affect performance, since each tooltip results in the creation of a map area element. In addition to this, each tooltip must be calculated by the chart every time it is redrawn. Thus, if a chart has 1000 data points, all with an associated tooltip, then the page that displays the chart image will have 1000 MapArea elements for the tooltips. In ASP.NET application MapAreas are rendered as part of the page and may take significant time to download to the client.&lt;/P&gt;
&lt;P&gt;If performance is critical and chart contain significant amount of data points consider avoiding using of tooltips. In Windows Forms application it may be more efficient to create on-demand tooltip using the timer and &lt;STRONG&gt;HitTest&lt;/STRONG&gt; function of the chart.&lt;/P&gt;
&lt;H3&gt;Hyperlinks and Map Area attributes (ASP.NET only)&lt;/H3&gt;
&lt;P&gt;Care must also be taken when setting the &lt;STRONG&gt;Url &lt;/STRONG&gt;and &lt;STRONG&gt;MapAreaAttributes&lt;/STRONG&gt; properties. This situation is similar to using tooltips, since each chart element that has its Url property set, which results in a MapArea element that is recalculated each time the chart is redrawn. &lt;/P&gt;
&lt;P&gt;If you must use one of the Tooltip, Url or MapAreaAttributes properties, using the second property has little affect.&lt;/P&gt;
&lt;H3&gt;Image Size and Type (ASP.NET only)&lt;/H3&gt;
&lt;P&gt;The larger the image size of the chart, the longer it will take to be streamed back to the requesting client. Also, the type of image being generated will affect its size. For example, a bitmap chart will be much larger than the exact same PNG chart. PNG is the recommended image type.&lt;/P&gt;
&lt;H3&gt;View State (ASP.NET)&lt;/H3&gt;
&lt;P&gt;Persisting the view state of the chart many data points may significantly increase the size of the response and amount of time required for the download.&lt;/P&gt;
&lt;P&gt;Chart control provides additional functionality to optimize its view state. Please refer to the documentation and &lt;A href="http://code.msdn.microsoft.com/mschart" target=_blank mce_href="http://code.msdn.microsoft.com/mschart"&gt;Chart Sample Framework&lt;/A&gt;.&lt;/P&gt;
&lt;H3&gt;Border Skins&lt;/H3&gt;
&lt;P&gt;Decorative borders, which can be set using the &lt;STRONG&gt;Chart.BorderSkin&lt;/STRONG&gt; property, will also have a major impact on the chart's performance, since they require a considerable amount of time to render. You can gain some chart performance by removing them.&lt;/P&gt;
&lt;P&gt;Hope this information is helpful and will allow you to squeeze more out of the Microsoft Chart Control! &lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9167949" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Performance/default.aspx">Performance</category></item><item><title>Microsoft Chart Control How-to: Using in a SharePoint web site</title><link>http://blogs.msdn.com/alexgor/archive/2008/11/30/microsoft-chart-control-how-to-using-in-a-sharepoint-web-site.aspx</link><pubDate>Sun, 30 Nov 2008 05:08:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9156844</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9156844.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9156844</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; MARGIN: 0px 20px 10px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=99 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_thumb.png" width=244 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoUsinginaShareP_FF02/image_thumb.png"&gt;&lt;/A&gt; Thanks to Marc Charmois we have a very nice example of using the chart control in the SharePoint web site. Here is a &lt;A href="http://mosshowto.blogspot.com/2008/11/chart-controls-net-framework-sharepoint.html" target=_blank mce_href="http://mosshowto.blogspot.com/2008/11/chart-controls-net-framework-sharepoint.html"&gt;link to his post&lt;/A&gt;…&lt;/P&gt;
&lt;P&gt;I will continue collecting links to all the good posts regarding the chart control in my blog.&lt;/P&gt;
&lt;P&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9156844" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/MOSS/default.aspx">MOSS</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Combining ASP.NET MVC and ASP.NET Charting Controls</title><link>http://blogs.msdn.com/alexgor/archive/2008/11/26/combining-asp-net-mvc-and-asp-net-charting-controls.aspx</link><pubDate>Thu, 27 Nov 2008 00:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9145332</guid><dc:creator>alexgor</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9145332.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9145332</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/CombiningASP.NETMVCa.NETChartingControls_C2B9/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/CombiningASP.NETMVCa.NETChartingControls_C2B9/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; MARGIN: 0px 20px 10px 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=107 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/CombiningASP.NETMVCa.NETChartingControls_C2B9/image_thumb.png" width=144 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/CombiningASP.NETMVCa.NETChartingControls_C2B9/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;Melvin Harbour recently posted in &lt;A href="http://weblogs.asp.net/melvynharbour/archive/2008/11/25/combining-asp-net-mvc-and-asp-net-charting-controls.aspx" mce_href="http://weblogs.asp.net/melvynharbour/archive/2008/11/25/combining-asp-net-mvc-and-asp-net-charting-controls.aspx"&gt;his blog&lt;/A&gt; about using ASP.NET Chart control with ASP.NET MVC.&lt;/P&gt;
&lt;P&gt;Alex&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9145332" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET+MVC/default.aspx">ASP.NET MVC</category></item><item><title>Microsoft Chart Control How-to: Add Rich Content Using Keywords</title><link>http://blogs.msdn.com/alexgor/archive/2008/11/11/microsoft-chart-control-how-to-using-keywords.aspx</link><pubDate>Tue, 11 Nov 2008 21:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9060627</guid><dc:creator>alexgor</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9060627.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9060627</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; MARGIN: 0px 20px 10px; BORDER-RIGHT-WIDTH: 0px" height=108 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_thumb_2.png" width=173 align=left border=0 mce_src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Adding Labels or Tooltips is a simple task in the chart, but what if we want to show more data than just a simple data point value? &lt;EM&gt;Keywords&lt;/EM&gt; allows specifying rich content for many text based properties, so that you can build a tooltip as shown in this &lt;STRONG&gt;Bubble&lt;/STRONG&gt; chart image.&lt;/P&gt;
&lt;P&gt;A &lt;EM&gt;Keyword&lt;/EM&gt; is a specially formatted character sequence which can be used in many chart string properties to provide rich content. During the rendering of the chart, each &lt;EM&gt;Keyword&lt;/EM&gt; is replaced with a value from the chart series or data point. For example, &lt;EM&gt;Keywords&lt;/EM&gt; may be used to display several series values in the chart data point labels or tooltips. The sample below will display series data point Y value using the currency format string in the tooltip.&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;chart.Series[0].Tooltip = “Data Point Y Value: #VALY{C0}” &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;
&lt;P&gt;As you may notice, to specify a tooltip on all chart data points we only need to set a single property of the series. You can use multiple keywords in one string and also specify optional formatting string. &lt;/P&gt;
&lt;H4&gt;Use cases&lt;/H4&gt;
&lt;P&gt;1) I want series data points to display a label with category name and price. Label example: "Bike -&amp;gt; $2.00"&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;series.Label = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#AXISLABEL -&amp;gt; #VALY{C}"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;2) I'm using a Bubble chart with 2 Y values presenting model price and popularity index and I want to show this to values in my data points tooltip. Here is tooltip example: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;"Model:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XR300 &lt;BR&gt;Popularity Index: 4.5" &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;series.ToolTip = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Model: \t#AXISLABEL\nPopularity Index: \t#VALY"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;3) I want to enable a postback and get an index of the data point the customer clicked on, so I can perform a drill-down action.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;series.PostBack = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#INDEX"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;4) I want to add additional columns in the legend to show average, minimum and total of my series as shown in the chart below:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_3.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=295 alt=image src="http://blogs.msdn.com/blogfiles/alexgor/WindowsLiveWriter/MicrosoftChartControlHowtoRichContentUsi_EDFF/image_thumb.png" width=411 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;DIV style="BORDER-RIGHT: #7f9db9 1px solid; BORDER-TOP: #7f9db9 1px solid; FONT-SIZE: 11px; OVERFLOW: auto; BORDER-LEFT: #7f9db9 1px solid; WIDTH: 539px; LINE-HEIGHT: 100%! important; BORDER-BOTTOM: #7f9db9 1px solid; FONT-FAMILY: courier new; HEIGHT: 497px; BACKGROUND-COLOR: white"&gt;
&lt;TABLE class="" style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; MARGIN: 2px 0px; WIDTH: 99%; BORDER-BOTTOM: #eee 0px solid; BORDER-COLLAPSE: collapse; BACKGROUND-COLOR: #fff; BORDER-RIGHT-WIDTH: 0px" cellSpacing=0 cellPadding=0&gt;
&lt;COLGROUP&gt;
&lt;COL style="PADDING-LEFT: 10px; FONT-SIZE: 11px; BORDER-BOTTOM: #f7f7f7 1px solid; FONT-FAMILY: courier new; WHITE-SPACE: nowrap"&gt;&lt;/COLGROUP&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Add header separator of type line&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].HeaderSeparator = LegendSeparatorStyle.Line;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].HeaderSeparatorColor = Color.Gray;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Add Color column&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;LegendCellColumn firstColumn = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;new&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt; LegendCellColumn();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;firstColumn.ColumnType = LegendCellColumnType.SeriesSymbol;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;firstColumn.HeaderText = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Color"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;firstColumn.HeaderBackColor = Color.WhiteSmoke;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].CellColumns.Add(firstColumn);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Add Legend Text column&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;LegendCellColumn secondColumn = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;new&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt; LegendCellColumn();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;secondColumn.ColumnType = LegendCellColumnType.Text;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;secondColumn.HeaderText = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Name"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;secondColumn.Text = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#LEGENDTEXT"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;secondColumn.HeaderBackColor = Color.WhiteSmoke;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].CellColumns.Add(secondColumn);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Add AVG cell column&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;LegendCellColumn avgColumn = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;new&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt; LegendCellColumn();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;avgColumn.Text = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#AVG{N2}"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;avgColumn.HeaderText = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Avg"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;avgColumn.Name = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"AvgColumn"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;avgColumn.HeaderBackColor = Color.WhiteSmoke;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].CellColumns.Add(avgColumn);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Add Total cell column&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;LegendCellColumn totalColumn = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;new&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt; LegendCellColumn();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;totalColumn.Text = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#TOTAL{N1}"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;totalColumn.HeaderText = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Total"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;totalColumn.Name = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"TotalColumn"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;totalColumn.HeaderBackColor = Color.WhiteSmoke;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].CellColumns.Add(totalColumn);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;&lt;/FONT&gt;&lt;FONT style="COLOR: green"&gt;// Set Min cell column attributes&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;LegendCellColumn minColumn = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;new&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt; LegendCellColumn();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;minColumn.Text = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"#MIN{N1}"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;minColumn.HeaderText = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Min"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;minColumn.Name = &lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"MinColumn"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;minColumn.HeaderBackColor = Color.WhiteSmoke;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" style="BACKGROUND-COLOR: #f7f7f7"&gt;Chart1.Legends[&lt;/FONT&gt;&lt;FONT style="COLOR: blue"&gt;"Default"&lt;/FONT&gt;&lt;FONT style="FONT-SIZE: 11px"&gt;].CellColumns.Add(minColumn);&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;
&lt;H4&gt;Supported Keyword List&lt;/H4&gt;
&lt;P&gt;Here is the list of supported keywords. Chart control support multiple Y values and all related keywords use the first one by default but also can be used with additional Y values. For example: &lt;/P&gt;
&lt;P&gt;“High=#VALY/nLow=#VALY2/nOpen=#VALY3/nClose=#VALY4”&lt;/P&gt;
&lt;P&gt;An optional format string can be added at the end of each keyword.&amp;nbsp; You can find more about possible format strings from here: &lt;A title=http://msdn.microsoft.com/en-us/library/427bttx3.aspx href="http://msdn.microsoft.com/en-us/library/427bttx3.aspx" mce_href="http://msdn.microsoft.com/en-us/library/427bttx3.aspx"&gt;http://msdn.microsoft.com/en-us/library/427bttx3.aspx&lt;/A&gt; Below is an example of using standard currency format and custom format string:&lt;/P&gt;
&lt;P&gt;“Price= #VALY2{C0}/nAverage Price = #AVGY2{C0}/nVolume = #VALY3{#,,.;(#,,.);0}”&lt;/P&gt;
&lt;TABLE class="" cellSpacing=0 cellPadding=2 width=661 border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" width=171&gt;&lt;STRONG&gt;Keyword&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" width=295&gt;&lt;STRONG&gt;Replaced By&lt;/STRONG&gt;&lt;/TD&gt;
&lt;TD class="" width=105&gt;&lt;STRONG&gt;Supports Multiple Y Values&lt;/STRONG&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD class="" width=88&gt;&lt;STRONG&gt;Supports Formatting String&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#VALX&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;X value of the data point.&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#VALY&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Y value of the data point&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#SERIESNAME&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Series name&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;No&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#LABEL&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Data point label&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;No&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#AXISLABEL&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Data point axis label&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;No&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#INDEX&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Data point index in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#PERCENT&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Percent of the data point Y value&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#LEGENDTEXT&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Series or data point legend text&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;No&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#CUSTOMPROPERTY(XXX)&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Series or data point XXX custom property value, where XXX is the name of the custom property.&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;No&lt;/TD&gt;
&lt;TD class="" width=88&gt;No&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#TOTAL&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Total of all Y values in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#AVG&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Average of all Y values in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#MIN&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Minimum of all Y values in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#MAX&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Maximum of all Y values in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#FIRST&lt;/TD&gt;
&lt;TD class="" vAlign=top width=295&gt;Y value of the first point in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top width=171&gt;#LAST&lt;/TD&gt;
&lt;TD class="" vAlign=top width=296&gt;Y value of the last point in the series&lt;/TD&gt;
&lt;TD class="" vAlign=top width=105&gt;Yes&lt;/TD&gt;
&lt;TD class="" width=88&gt;Yes&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;H4&gt;Objects and Properties where keywords can be used&lt;/H4&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Series&lt;/EM&gt;&lt;/STRONG&gt; and &lt;STRONG&gt;&lt;EM&gt;DataPoint&lt;/EM&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Label &lt;/LI&gt;
&lt;LI&gt;AxisLabel &lt;/LI&gt;
&lt;LI&gt;ToolTip &lt;/LI&gt;
&lt;LI&gt;Url &lt;/LI&gt;
&lt;LI&gt;MapAreaAttributes &lt;/LI&gt;
&lt;LI&gt;PostBackValue &lt;/LI&gt;
&lt;LI&gt;LegendToolTip &lt;/LI&gt;
&lt;LI&gt;LegendMapAreaAttributes &lt;/LI&gt;
&lt;LI&gt;LegendPostBackValue &lt;/LI&gt;
&lt;LI&gt;LegendUrl &lt;/LI&gt;
&lt;LI&gt;LegendText &lt;/LI&gt;
&lt;LI&gt;LabelToolTip &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Annotation&lt;/EM&gt;&lt;/STRONG&gt; (only if anchored to the data point using SetAnchor method)&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ToolTip &lt;/LI&gt;
&lt;LI&gt;Url &lt;/LI&gt;
&lt;LI&gt;MapAreaAttributes &lt;/LI&gt;
&lt;LI&gt;PostBackValue &lt;/LI&gt;
&lt;LI&gt;Text (TextAnnotation)&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;LegendCellColumn&lt;/EM&gt;&lt;/STRONG&gt; (only for legend items automatically created for series or data points): &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Text &lt;/LI&gt;
&lt;LI&gt;Tooltip &lt;/LI&gt;
&lt;LI&gt;Url &lt;/LI&gt;
&lt;LI&gt;MapAreaAttributes &lt;/LI&gt;
&lt;LI&gt;PostBackValue&lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9060627" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Windows+Forms/default.aspx">Windows Forms</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item><item><title>Microsoft Chart Control vs. Dundas Chart Control</title><link>http://blogs.msdn.com/alexgor/archive/2008/11/07/microsoft-chart-control-vs-dundas-chart-control.aspx</link><pubDate>Fri, 07 Nov 2008 22:32:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9052903</guid><dc:creator>alexgor</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/alexgor/comments/9052903.aspx</comments><wfw:commentRss>http://blogs.msdn.com/alexgor/commentrss.aspx?PostID=9052903</wfw:commentRss><description>&lt;P&gt;I get a lot of questions about 'relationship' of our Microsoft Chart Control to the well known &lt;A href="http://www.dundas.com/" target=_blank mce_href="http://www.dundas.com/"&gt;Dundas Data Visualization&lt;/A&gt; controls. You can definitely see the similarities in the features, appearance, APIs and demos we use.&lt;/P&gt;
&lt;P&gt;So I will start with a&amp;nbsp; little bit of history... Dundas is one of the leaders in data visualization, who provides well known Chart, Gauge, Map and other visual controls for different Microsoft development platforms (ASP.NET, Windows Forms, SQL Reporting Services and SharePoint). Microsoft acquired Dundas Data Visualization Intellectual Property in April 2007 and is integrating this technology in different Microsoft products. New Chart and Gauge report items were already released as part of SQL Reporting Services 2008. We also announced the new Map report item which will be available in the next release of SSRS. Microsoft Chart controls (ASP.NET and Windows Forms), released at PDC 2008, also based on the source code acquired from Dundas! Microsoft Chart control is available as a separate installation for .NET Framework 3.5 SP1 and will be part of .NET Framework 4.0.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Where I can download the new Microsoft Chart controls?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;You can download and install chart from this &lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=130F7986-BF49-4FE5-9CA8-910AE6EA442C&amp;amp;displaylang=en"&gt;link&lt;/A&gt;.&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;So what are the differences between Microsoft and Dundas controls?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Microsoft Chart control is based on Dundas Chart source code version 5.5. We spent significant amount of time making sure the control passes Microsoft security review and meets accessibility, API and other requirements. As a result there were a few changes including changes in the public API. Several features were also cut:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Chart UI (Toolbar, Context Menu and Property Pages) &lt;/LI&gt;
&lt;LI&gt;Flash and SVG Rendering and Animations &lt;/LI&gt;
&lt;LI&gt;ASP.NET scrolling and zooming &lt;/LI&gt;&lt;/UL&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;When other controls (Gauge, Map, ...) will be available&amp;nbsp;in the .NET Framework?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Microsoft&amp;nbsp;does not have the exact dates at this moment when other data visualization controls for .NET Framework will be released.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;Can I still purchase visualization controls from Dundas?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Yes, you can still purchase visualization controls from Dundas. Our team will continue bringing new visualizations to different Microsoft products; meanwhile they will be available from Dundas directly, where they continue to support and enhance available visualizations.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;How do I get technical support?&lt;/STRONG&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Standard Microsoft support options are available including dedicated &lt;A class="" href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/" target=_blank mce_href="http://social.msdn.microsoft.com/Forums/en-US/MSWinWebChart/threads/"&gt;Microsoft Chart Control Forum&lt;/A&gt;.&amp;nbsp;Please note that Dundas keeps supporting the products purchased directly from them and is not responsible for any support for Microsoft Chart Controls.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Thanks, &lt;BR&gt;Alex.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9052903" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/alexgor/archive/tags/Chart/default.aspx">Chart</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Dundas/default.aspx">Dundas</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/.NET+Framework/default.aspx">.NET Framework</category><category domain="http://blogs.msdn.com/alexgor/archive/tags/Microsoft+Chart+Control/default.aspx">Microsoft Chart Control</category></item></channel></rss>