2014-03-01 66 views
0

我正在使用MS图表以图形方式显示静态数据。它的.net framework 3.5 VS2008。在初始阶段,我认为它很容易,我实现了它。但我们有这么多的JS库和现代的东西..是有没有更好的方式来做到这一点...代码片段如下.net MS Chart的任何替代方法?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> 
<%@ Register Assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp"%> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <table width="100%"> 
      <tr> 
       <td> 
        <asp:Button ID="btnFindXcell" runat="server" Text="Create Chart" OnClick="btnFindXcell_Click" /> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:GridView ID="dgvEmployee" runat="server"> 
        </asp:GridView> 
        <asp:Chart ID="Chart1" runat="server" Width="800px"> 
         <series> 
          <asp:Series Name="Series1"></asp:Series> 
         </series> 
         <chartareas> 
         <asp:ChartArea BorderDashStyle="Solid" Name="ChartArea1"></asp:ChartArea> 
         </chartareas> 
        </asp:Chart> 
       </td> 
      </tr> 
     </table> 
    </div> 
    </form> 
</body> 
</html> 

+++++++++++++++++++++++++++++++++++ 

using System; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Configuration; 
using System.IO; 
using System.Data.OleDb; 
using Excel; 
using System.Web.UI.DataVisualization.Charting; 
using System.Drawing; 


public partial class Default : System.Web.UI.Page 
{ 
    private Color color; 
    private int b; 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void btnFindXcell_Click(object sender, EventArgs e) 
    { 
     DataSet ds = new DataSet(); 
     DataTable dt = new DataTable(); 
     string path = Server.MapPath(ConfigurationManager.AppSettings["xmlPath"]); 
     System.IO.FileInfo file = new System.IO.FileInfo(path); 

     if (file.Exists) 
     { 
      //dt = FileUploadExcel(path); 
      ds = ImportExcelXLS(path, true); 
      dgvEmployee.DataSource = ds.Tables[0]; 
      dgvEmployee.DataBind(); 
     } 
     //LoadChartCurrencyTotal(ds.Tables[0]); 
     Chart1.Series["Series1"].ChartType = SeriesChartType.Column; 
     Chart1.Series["Series1"].Color = Random(); 
     Chart1.Series["Series1"]["DrawingStyle"] = "Emboss"; 
     Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true; 
     Chart1.Series["Series1"].IsValueShownAsLabel = true; 
     Chart1.DataSource = ds.Tables[0]; 
     Chart1.Series["Series1"].XValueMember = "Name"; 
     Chart1.Series["Series1"].YValueMembers = "ID"; 
     Chart1.Series["Series1"].XAxisType = AxisType.Primary; 
     Chart1.Series["Series1"].XValueType = ChartValueType.String; 
     Chart1.Series["Series1"].IsValueShownAsLabel = true; 
     Chart1.Series["Series1"].LabelForeColor = Color.Black; 


     Chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1; 
     Chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle.Angle = 90; 
     Chart1.ChartAreas["ChartArea1"].AxisX.LineColor = Color.DarkGray; 
     Chart1.ChartAreas["ChartArea1"].AxisY.LineColor = Color.Pink; 
     Chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineColor = Color.Azure; 
     Chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineColor = Color.Peru; 
     Chart1.BorderlineColor = Color.PaleVioletRed; 
     Chart1.DataBind(); 

    } 

    public Color Random() 
    { 
     Random r = new Random(); 
     b = r.Next(1, 5); 
     switch (b) 
     { 
      case 1: 
       { 
        color = Color.SeaGreen; 
       } 
       break; 
      case 2: 
       { 
        color = Color.SlateGray; 
       } 
       break; 
      case 3: 
       { 
        color = Color.SkyBlue; 
       } 
       break; 
      case 4: 
       { 
        color = Color.SteelBlue; 
       } 
       break; 
     } 

     return color; 
    } 
    public static DataSet ImportExcelXLS(string FileName, bool hasHeaders) 
    { 
     string HDR = hasHeaders ? "Yes" : "No"; 
     string strConn; 
     if (FileName.Substring(FileName.LastIndexOf('.')).ToLower() == ".xlsx") 
      strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties=\"Excel 12.0;HDR=" + HDR + ";IMEX=0\""; 
     else 
      strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";Extended Properties=\"Excel 8.0;HDR=" + HDR + ";IMEX=0\""; 

     DataSet output = new DataSet(); 

     using (OleDbConnection conn = new OleDbConnection(strConn)) 
     { 
      conn.Open(); 

      DataTable schemaTable = conn.GetOleDbSchemaTable(
       OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

      foreach (DataRow schemaRow in schemaTable.Rows) 
      { 
       string sheet = schemaRow["TABLE_NAME"].ToString(); 

       if (!sheet.EndsWith("_")) 
       { 
        try 
        { 
         OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn); 
         cmd.CommandType = CommandType.Text; 

         DataTable outputTable = new DataTable(sheet); 
         output.Tables.Add(outputTable); 
         new OleDbDataAdapter(cmd).Fill(outputTable); 
        } 
        catch (Exception ex) 
        { 
         throw new Exception(ex.Message + string.Format("Sheet:{0}.File:F{1}", sheet, FileName), ex); 
        } 
       } 
      } 
     } 
     return output; 
    } 
    public DataTable FileUploadExcel(string filepath) 
    { 
     DataTable dt = new DataTable(); 
     System.IO.FileInfo fi = new FileInfo(filepath); 
     string FileExtension = fi.Extension; 
     FileStream stream = File.Open(filepath, FileMode.Open, FileAccess.Read); 
     IExcelDataReader excelReader; 
     if (FileExtension == ".xls") 
     { 
      //1. Reading from a binary Excel file ('97-2003 format; *.xls) 
      excelReader = ExcelReaderFactory.CreateBinaryReader(stream); 
     } 
     else 
     { 
      //2. Reading from a OpenXml Excel file (2007 format; *.xlsx) 
      excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream); 
     } 
     excelReader.IsFirstRowAsColumnNames = true; 
     if (excelReader.AsDataSet().Tables[0].Rows.Count > 0) 
     { 
      dt = excelReader.AsDataSet().Tables[0]; 
     } 
     return dt; 
    } 

} 

其测试目的从excel文件中读取数据并根据数据创建图表。

+1

我不知道我明白这个问题,没有任何问题w /代码,你只是想推荐一个更好的工具/技术? – paqogomez

+0

@paqogomez。感谢回复......它的工作很好......我想用一些更好的技术来适应上面的代码..我只是读... http://socialcompare.com/en/comparison/javascript-graphs-and-charts-libraries ..并认为高图将是一个更好的选择 –

回答

1

当前时间使用最广泛的图表库之一是highcharts。我强烈推荐它,它易于使用,具有丰富的功能和用户体验的高度可定制性。

+0

感谢兄弟...但我不知道如何将其与asp.net集成..你可以给我和例如我的代码片段 –

0

有很多jQuery的图表 一些高度使用的是遵循

  1. JsCharts
  2. jQuery Visualize Plugin - Exapmles
  3. Highchart
  4. Flot - Examples
  5. jqPlot Examples
  6. Chartjs
+0

@satindar感谢您的答案..可以请你帮我一些asp。 net code snippet ..我用MS图表做了一个测试目的...我们可以用highcharts做同样的工作 –

+0

@RahulChowdhury:很多样本可用,主要是客户端,所以你需要和你一起玩d ata生成xml /数组并使用上面的任何jQuery图表插件来显示您的数据,阅读文档以更好地理解特定的jquery插件 –

0

您可能还需要看一看:

ZedGraph该对象被实现为既是用户控件和Web控件。将其集成到ASP.NET中涵盖this tutorial

Google Visualization这是一个JavaScript库,可以集成到任何网页上。 Google有一个很好的Getting Started页面,可以告诉你该怎么做。