Bạn có thể sử dụng điều khiển biểu đồ theo hai cách:
Tạo các hình ảnh từ một điều khiển
Bằng cách tạo biểu đồ và trả lại nó dưới dạng hình ảnh từ một hành động (như Chatuman đề cập đến tôi nghĩ):
Chart chart = new Chart();
chart.BackColor = Color.Transparent;
chart.Width = Unit.Pixel(250);
chart.Height = Unit.Pixel(100);
Series series1 = new Series("Series1");
series1.ChartArea = "ca1";
series1.ChartType = SeriesChartType.Pie;
series1.Font = new Font("Verdana", 8.25f, FontStyle.Regular);
series1.Points.Add(new DataPoint {
AxisLabel = "Value1", YValues = new double[] { value1 } });
series1.Points.Add(new DataPoint {
AxisLabel = "Value2", YValues = new double[] { value2 } });
chart.Series.Add(series1);
ChartArea ca1 = new ChartArea("ca1");
ca1.BackColor = Color.Transparent;
chart.ChartAreas.Add(ca1);
using (var ms = new MemoryStream())
{
chart.SaveImage(ms, ChartImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return File(ms.ToArray(), "image/png", "mychart.png");
}
WebForms Style
Bằng cách này bạn chỉ cần đưa biểu đồ vào dạng xem .aspx của bạn (giống như với biểu mẫu web truyền thống). Đối với điều này bạn sẽ phải treo lên các bit có liên quan trong web.config của bạn
<controls>
...
<add tagPrefix="asp"
namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
<httpHandlers>
...
<add path="ChartImg.axd"
verb="GET,HEAD"
validate="false"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>
<handlers>
...
<add name="ChartImageHandler"
preCondition="integratedMode"
verb="GET,HEAD"
path="ChartImg.axd"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
Bạn không thể chạy mã bên trong các yếu tố Datapoint khi xây dựng bảng xếp hạng, vì vậy để treo lên dữ liệu của bạn, bạn sẽ cần một trong lớp View. Điều này làm việc ok cho tôi. Làm việc theo cách này làm cho điều khiển hiển thị URL đến một hình ảnh được tạo bởi trình xử lý điều khiển biểu đồ http. Trong triển khai của bạn, bạn sẽ cần phải cung cấp một thư mục có thể ghi cho nó để lưu trữ hình ảnh.
* VS 2010/NET 4 Hỗ trợ *
Để làm việc này trong .NET 4 bạn cần thay đổi các tài liệu tham khảo biểu đồ lên phiên bản 4.0.0.0 với token khóa công khai thích hợp.
Ngoài ra có vẻ như điều khiển biểu đồ giờ đây tạo ra các url đến đường dẫn yêu cầu hiện tại thay vì đường yêu cầu. Đối với tôi, điều này có nghĩa là tất cả các yêu cầu biểu đồ dẫn đến lỗi 404 vì /{Controller}/ChartImg.axd
và tương đương bị chặn bởi các tuyến đường. Để sửa lỗi này tôi đã thêm các cuộc gọi IgnoreRoute bổ sung mà bao gồm tập quán của tôi - một giải pháp tổng quát hơn sẽ tốt hơn:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...
+1 - đẹp. 2 thay đổi nhỏ: 'MemoryStream ms = new MemoryStream()' phải nằm trong một khối 'using' và bộ điều khiển MVC có các phương thức trợ giúp để trả về các tệp - thay vì' new FileStreamResult' bạn có thể làm 'return File (ms.ToArray() , "image/png", "mychart.png") ' – Keith
Cảm ơn @Keith, cả hai điểm tốt nên tôi đã cập nhật câu trả lời. –
+1 cho câu trả lời hay. Cảm ơn đã dành thời gian. – gyurisc