2015-10-14 70 views
1

我试图在允许用户交互(悬停,单击)的我的web应用程序中创建一个饼图。饼图使用图表帮助程序的Web表单版本呈现良好。但图像映射总是空:来自C#System.Web.UI.DataVisualization.Charting.Chart帮助器的图像映射

List<string> items = new List<string>(new string[] {"what", "is", "wrong"}); 
    List<decimal> values = new List<decimal>(new decimal[] { 1, 2, 3 }); 
    Chart myChart = new Chart(); 
    myChart.ChartAreas.Add(new ChartArea()); 
    myChart.Series.Add(new Series("Data") { ChartType = SeriesChartType.Pie }); 
    myChart.Series["Data"].Points.DataBindXY(items, values); 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     myChart.SaveImage(stream, ChartImageFormat.Jpeg); 
     string result = "<img usemap='#myMap' src='" + String.Format("data:image/jpeg;base64,{0}", Convert.ToBase64String(stream.ToArray())) + "' />"; 
     return result + myChart.GetHtmlImageMap("myMap"); 
    } 

产生的图像地图:

<map name="myMap" id="myMap"> 
    <area shape="rect" coords="0,0,0,0" alt=""> 
</map> 

MS documentation包括这个哦,所以,有用的警告:“如果你渲染图作为二进制流,一个特殊的技术必须用于实现客户端图像映射。“

我错过了什么? MS显然希望保守秘密的“特殊技术”是什么?

+0

您是否按照建议[这里](https://msdn.microsoft.com/zh-cn/library/system.web.ui.datavisualization.charting)向'MapAreas'集合添加了'MapArea'。 chart.ismapenabled%28v = vs.110%29.aspx)?更多提示[此处](https://msdn.microsoft.com/zh-CN/library/system.web.ui.datavisualization.charting.chart.rendertype%28v=vs.110%29.aspx?f=255&MSPPError= -2147217396) – TaW

+0

不错!想要添加为解决方案,以便获得积分?最重要的部分是获取MapArea,如果您在数据点上设置了Tooltip或MapAreaAttributes,则会自动发生。 – loopylou

回答

0

事情是很好的隐藏和分散,像往常一样控制任何化身Chart

this quote推导:

Chart.IsMapEnabled物业

备注;

将此属性设置为false将禁用图像映射。这将发生 即使在以下情况下:

  • 的URL,MapAreaAttributes,LabelMapAreaAttributes,LegendMapAreaAttributes或图表元素的工具提示属性设置。

  • MapArea对象已添加到MapAreasCollection对象中。

你需要一个MapArea添加到MapAreas收集Chart的。

更多的提示可以用Chart.RenderType发现:

Chart.RenderType

备注:

下面的列表介绍了三种方法,其中一个图表图像可以 呈现:

ImageTag渲染类型导致临时文件被保存到磁盘a t服务器。该图表使用 标签在客户端显示,其SRC属性设置为由 ImageLocation属性指定的URL。

如果指定了BinaryStreaming渲染类型,则服务器上没有临时图像文件。而是将图表图像作为二进制流发送至 ,并使用SRC 属性设置为另一个.aspx页面的标记显示,该页面负责生成 图表图像。

呈现类型的ImageMap会导致创建图像映射,但不会显示实际图表图像。只有在使用渲染类型为 BinaryStreaming的图像映射时才应该使用此选项 。