C#System.Web.UI.DataVisualization.Charting.Chart helper

时间:2015-10-14 17:02:01

标签: c# charts

我试图在我的网络应用程序中创建一个饼图,允许用户交互(悬停,点击)。使用Chart帮助程序的Web表单版本可以很好地呈现饼图。但是图像映射总是空的:

    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包括这个非常有用的警告:&#34;如果将图表呈现为二进制流,则必须使用特殊技术来实现客户端图像映射。&#34;

我错过了什么?什么是&#34;特殊技术&#34; MS显然想保守秘密?

1 个答案:

答案 0 :(得分:0)

Chart控件的任何形式一样,事物都是隐藏和分散的。

this quote推导出来:

  

Chart.IsMapEnabled属性

     

说明

     

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

     
      
  • 设置图表元素的Url,MapAreaAttributes,LabelMapAreaAttributes,LegendMapAreaAttributes或ToolTip属性。

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

  •   

您需要在MapArea的{​​{1}}集合中添加MapAreas

Chart.RenderType可以找到更多提示:

  

<强> Chart.RenderType

     

说明:

     

以下列表描述了图表图像的三种使用方式   渲染:

     

ImageTag呈现类型会导致临时文件保存到服务器上的磁盘。使用a在客户端显示图表    标记,其SRC属性设置为由指定的URL   ImageLocationproperty。

     

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

     

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