c# ms chart 控件使用方法

第一个简单的chart: spline// Create new data series and set it's visualattributes
       Series series = new Series("Spline");
       series.ChartType = SeriesChartType.Spline;
       series.BorderWidth = 3;
       series.ShadowOffset = 2;

       // Populate new series with data
       series.Points.AddY(67);
       series.Points.AddY(57);
       series.Points.AddY(83);
       series.Points.AddY(23);
       series.Points.AddY(70);
       series.Points.AddY(60);
       series.Points.AddY(90);
       series.Points.AddY(20);

       // Add series into the chart's series collection
       Chart1.Series.Add(series);

同时显示2条曲线
// Populate series with random data
       Random random = new Random();
       for (int pointIndex = 0; pointIndex < 10;pointIndex++)
       {
           Chart1.Series["Series1"].Points.AddY(random.Next(45, 95));
           Chart1.Series["Series2"].Points.AddY(random.Next(5, 75));
       }

       // Set series chart type
       Chart1.Series["Series1"].ChartType = SeriesChartType.Line;
       Chart1.Series["Series2"].ChartType = SeriesChartType.Spline;

       // Set point labels
       Chart1.Series["Series1"].IsValueShownAsLabel = true;
       Chart1.Series["Series2"].IsValueShownAsLabel = true;

       // Enable X axis margin
       Chart1.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true;

       // Enable 3D, and show data point marker lines
       Chart1.ChartAreas["ChartArea1"].Area3DStyle.Enable3D = true;
       Chart1.Series["Series1"]["ShowMarkerLines"] = "True";
       Chart1.Series["Series2"]["ShowMarkerLines"] = "True";

显示column类型图
// Create new data series and set it's visual attributes
       Series series = new Series("FlowRead");
       series.ChartType = SeriesChartType.Column;
       series.BorderWidth = 3;
       series.ShadowOffset = 2;

       // Populate new series with data
       series.Points.AddY(67);
       series.Points.AddY(57);
       series.Points.AddY(83);
       series.Points.AddY(23);
       series.Points.AddY(70);
       series.Points.AddY(60);
       series.Points.AddY(90);
       series.Points.AddY(20);

       // Add series into the chart's series collection
       Chart1.Series.Add(series);

很多点,效率还可以
// Fill series data
       double yValue = 50.0;
       Random random = new Random();
       for (int pointIndex = 0; pointIndex < 20000;pointIndex++)
       {
           yValue = yValue + (random.NextDouble() * 10.0 - 5.0);
           Chart1.Series["Series1"].Points.AddY(yValue);
       }

       // Set fast line chart type
       Chart1.Series["Series1"].ChartType = SeriesChartType.FastLine;

    }

日期,xy类型
// Create a new random number generator
       Random rnd = new Random();

       // Data points X value is using current date
       DateTime date = DateTime.Now.Date;

       // Add points to the stock chart series
       for (int index = 0; index < 10; index++)
       {
           Chart1.Series["Series1"].Points.AddXY(
               date,               // X value is a date
               rnd.Next(40,50));    //Close Y value

           // Add 1 day to our X value
           date = date.AddDays(1);
       }

int-int的xy数据绘图
// Create a new random number generator
       Random rnd = new Random();

       // Add points to the stock chart series
       for (int index = 0; index < 10; index++)
       {
           Chart1.Series["Series1"].Points.AddXY(
               rnd.Next(10,90),               // X value is a date
               rnd.Next(40,50));    //Close Y value
       }

数据库数据,datetime-int类型
string connStr ="server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
       SqlConnection myConn = new SqlConnection(connStr);
       string selStr = "select 时间,序号 from pub_log_read order by 序号asc";
       SqlCommand myCmd = myConn.CreateCommand();
       myCmd.CommandText = selStr;
       myConn.Open();
       SqlDataReader sdr =myCmd.ExecuteReader(CommandBehavior.CloseConnection);

       // Since the reader implements and IEnumerable, pass the readerdirectly into
       // the DataBindTable method with the name of the Column to be usedas the XValue
       Chart1.DataBindTable(sdr, "时间");

       sdr.Close();
       myConn.Close();

数据库数据2,string-int类型
string connStr ="server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
       SqlConnection myConn = new SqlConnection(connStr);
       string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read groupby 帐号 order by 帐号 asc";
       SqlCommand myCmd = myConn.CreateCommand();
       myCmd.CommandText = selStr;
       myConn.Open();
       SqlDataReader sdr =myCmd.ExecuteReader(CommandBehavior.CloseConnection);

       // Since the reader implements and IEnumerable, pass the readerdirectly into
       // the DataBindTable method with the name of the Column to be usedas the XValue
       Chart1.DataBindTable(sdr, "帐号");

       sdr.Close();
       myConn.Close();

数据库绑定3-error?
string connStr ="server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
       SqlConnection myConn = new SqlConnection(connStr);
       string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read groupby 帐号 order by 帐号 asc";
       SqlCommand myCmd = myConn.CreateCommand();
       myCmd.CommandText = selStr;
       myConn.Open();

       // Set chart data source
       Chart1.DataSource = myCmd;

       // Set series members names for the X and Y values
       Chart1.Series["Series1"].XValueMember = "帐号";
       Chart1.Series["Series1"].YValueMembers = "次数";

       // Data bind to the selected data source
       Chart1.DataBind();
       myConn.Close();

数据库4,只绑定y
string connStr ="server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
       SqlConnection myConn = new SqlConnection(connStr);
       string selStr = "select 序号 from pub_log_read order by 序号asc";
       SqlCommand myCmd = myConn.CreateCommand();
       myCmd.CommandText = selStr;
       myConn.Open();
       SqlDataReader sdr =myCmd.ExecuteReader(CommandBehavior.CloseConnection);

       // Since the reader implements and IEnumerable, pass the readerdirectly into
       // the DataBindTable method with the name of the Column to be usedas the XValue
       Chart1.Series[0].Points.DataBindY(sdr);

       sdr.Close();
       myConn.Close();

数据库5,绑定xy
string connStr ="server=localhost;database=seis_project;uid=seisprjs;pwd=seisprjs";
       SqlConnection myConn = new SqlConnection(connStr);
       string selStr = "select 帐号,count(帐号) as 次数 from pub_log_read groupby 帐号 order by 帐号 desc";
       SqlCommand myCmd = myConn.CreateCommand();
       myCmd.CommandText = selStr;
       myConn.Open();
       SqlDataReader sdr =myCmd.ExecuteReader(CommandBehavior.CloseConnection);

       // Since the reader implements and IEnumerable, pass the readerdirectly into
       // the DataBindTable method with the name of the Column to be usedas the XValue
       Chart1.Series[0].Points.DataBindXY(sdr, "帐号",sdr,"次数");

       sdr.Close();
       myConn.Close();

数据库6,支持显示参数
// Resolve the address to the Access database
    stringfileNameString = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    //Initialize a connectionstring   
    stringmyConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=" + fileNameString;
   
    // Definethe databasequery   
    stringmySelectQuery="SELECT * FROM REPSALES WHERE Year=2004;";

    // Createa database connection object using the connectionstring   
   OleDbConnection myConnection = newOleDbConnection(myConnectionString);
   
    // Create adatabase command on the connection usingquery   
    OleDbCommandmyCommand = new OleDbCommand(mySelectQuery, myConnection);
   
    // Open theconnection   
   myCommand.Connection.Open();
   
    // Create adatabasereader   
   OleDbDataReader myReader =myCommand.ExecuteReader(CommandBehavior.CloseConnection);
   
    // Since thereader implements and IEnumerable, pass the reader directlyinto
    // theDataBind method with the name of the Columns assigned to theappropriateproperty   
   Chart1.Series["Series1"].Points.DataBind(
       myReader,
       "Name",
       "Sales",
       "Tooltip=Year, Label=Commissions{C2}");

    // Closethe reader and the connection
   myReader.Close();
   myConnection.Close();

数据库7,支持多line
// Resolve the address to the Access database
    stringfileNameString = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    //Initialize a connectionstring   
    stringmyConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=" + fileNameString;
   
    // Definethe databasequery   
    stringmySelectQuery="SELECT * FROM REPSALES;";

    // Createa database connection object using the connectionstring   
   OleDbConnection myConnection = newOleDbConnection(myConnectionString);
   
    // Create adatabase command on the connection usingquery   
    OleDbCommandmyCommand = new OleDbCommand(mySelectQuery, myConnection);
   
    // Open theconnection   
   myCommand.Connection.Open();
   
    // Create adatabasereader   
   OleDbDataReader myReader =myCommand.ExecuteReader(CommandBehavior.CloseConnection);
   
    // Data bindchart to a table where all rows are grouped in series by the "Name"column
   Chart1.DataBindCrossTable(
       myReader,
       "Name",
       "Year",
       "Sales",
       "Label=Commissions{C}");

    // Closethe reader and the connection
   myReader.Close();
   myConnection.Close();

数据库8,按照行添加数据
// Resolve the address to the Access database
    stringfileNameString = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    //Initialize a connectionstring   
    stringmyConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=" + fileNameString;

    // Definethe databasequery   
    stringmySelectQuery="SELECT * FROM SALESCOUNTS;";

    // Createa database connection object using the connectionstring   
   OleDbConnection myConnection = newOleDbConnection(myConnectionString);
   
    // Create adatabase command on the connection usingquery   
    OleDbCommandmyCommand = new OleDbCommand(mySelectQuery, myConnection);
   
    // Open theconnection   
   myCommand.Connection.Open();
   
    //Initializes a new instance of the OleDbDataAdapter class
   OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
   myDataAdapter.SelectCommand = myCommand;

    //Initializes a new instance of the DataSet class
    DataSetmyDataSet = new DataSet();

    // Addsrows in the DataSet
   myDataAdapter.Fill(myDataSet,"Query");   
   
   foreach(DataRow row in myDataSet.Tables["Query"].Rows)
    {
       // For each Row add a new series
       string seriesName = row["SalesRep"].ToString();
       Chart1.Series.Add(seriesName);
       Chart1.Series[seriesName].ChartType = SeriesChartType.Line;
       Chart1.Series[seriesName].BorderWidth = 2;

       for(int colIndex = 1; colIndex <myDataSet.Tables["Query"].Columns.Count; colIndex++)
       {
           // For each column (column 1 and onward) add the value as apoint
           string columnName =myDataSet.Tables["Query"].Columns[colIndex].ColumnName;
           int YVal = (int) row[columnName];

           Chart1.Series[seriesName].Points.AddXY(columnName, YVal);
       }
    }

   DataGrid.DataSource = myDataSet;
   DataGrid.DataBind();

    // Closesthe connection to the data source. This is the preferred
    // method ofclosing any open connection.
   myCommand.Connection.Close();

使用xml数据
// resolve the address to the XML document
    stringfileNameString = this.MapPath(".");
    stringfileNameSchema = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\data.xml";
   fileNameSchema += "..\\..\\..\\data\\data.xsd";

    //Initializes a new instance of the DataSet class
    DataSetcustDS = new DataSet();
       
    // Read XMLschema into the DataSet.
   custDS.ReadXmlSchema( fileNameSchema );

    // ReadXML schema and data into the DataSet.
   custDS.ReadXml( fileNameString );
           
    //Initializes a new instance of the DataView class
    DataViewfirstView = new DataView(custDS.Tables[0]);

    // Sincethe DataView implements and IEnumerable, pass the reader directlyinto
    // theDataBindTable method with the name of the column used for the Xvalue.  
   Chart1.DataBindTable(firstView, "Name");

使用excel数据
// resolve the address to the Excel file
    stringfileNameString = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\ExcelData.xls";

    // Createconnection object by using the preceding connection string.
    string sConn= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
       fileNameString + ";Extended Properties="Excel8.0;HDR=YES"";
   OleDbConnection myConnection = new OleDbConnection( sConn );
   myConnection.Open();

    // Thecode to follow uses a SQL SELECT command to display the data fromthe worksheet.
    // Createnew OleDbCommand to return data from worksheet.
    OleDbCommandmyCommand = new OleDbCommand( "Select * From [data1$A1:E25]",myConnection );

    // createa databasereader   
   OleDbDataReader myReader =myCommand.ExecuteReader(CommandBehavior.CloseConnection);

    //Populate the chart with data in the file
   Chart1.DataBindTable(myReader, "HOUR");

    // closethe reader and the connection
   myReader.Close();
   myConnection.Close();

使用csv数据
// Filename of the CSV file
    string file= "DataFile.csv";

    // Getthe path of the CSV file
    string path= this.MapPath(".");
    path +="..\\..\\..\\data\";

    // Createa select statement and a connection string.
    stringmySelectQuery = "Select * from " + file;
    stringConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
       path+ ";Extended Properties="Text;HDR=No;FMT=Delimited"";
   OleDbConnection myConnection = new OleDbConnection(ConStr);

    // Createa database command on the connection using query
    OleDbCommandmyCommand = new OleDbCommand(mySelectQuery, myConnection);

    // Openthe connection and create the reader
   myCommand.Connection.Open();
   OleDbDataReader myReader =myCommand.ExecuteReader(CommandBehavior.CloseConnection);

    // Column1 is a time value, column 2 is a double
    // Databindthe reader to the chart using the DataBindXY method
   Chart1.Series[0].Points.DataBindXY(myReader, "1", myReader,"2");

    // Closeconnection and data reader
   myReader.Close();
   myConnection.Close();

数组绘图
// Initialize an array of doubles
       double[] yval = { 2, 6, 4, 5, 3 };

       // Initialize an array of strings
       string[] xval = { "Peter", "Andrew", "Julie", "Mary", "Dave" };

       // Bind the double array to the Y axis points of the Default dataseries
       Chart1.Series["Series1"].Points.DataBindXY(xval, yval);
数据库9,dataview// Resolve the address to the Access database
    stringfileNameString = this.MapPath(".");
   fileNameString += "..\\..\\..\\data\\chartdata.mdb";

    //Initialize a connectionstring   
    stringmyConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DataSource=" + fileNameString;
               
    // Definethe databasequery   
    stringmySelectQuery="SELECT * FROM REPS;";

    // Createa database connection object using the connectionstring   
   OleDbConnection myConnection = newOleDbConnection(myConnectionString);
               
    // Create adatabase command on the connection usingquery   
    OleDbCommandmyCommand = new OleDbCommand(mySelectQuery, myConnection);
               
    // Open theconnection   
   myCommand.Connection.Open();
               
    //Initializes a new instance of the OleDbDataAdapter class
   OleDbDataAdapter custDA = new OleDbDataAdapter();
   custDA.SelectCommand = myCommand;

    //Initializes a new instance of the DataSet class
    DataSetcustDS = new DataSet();

    // Addsrows in the DataSet
   custDA.Fill(custDS, "Customers");

    //Initializes a new instance of the DataView class
    DataViewfirstView = new DataView(custDS.Tables[0]);

    // Sincethe DataView implements IEnumerable, pass the dataview directlyinto
   //   the DataBind method with thename of the Columns selected in thequery   
   Chart1.Series["Default"].Points.DataBindXY(firstView,"Name",firstView, "Sales");

    // Closesthe connection to the data source. This is the preferred
   //   method of closing any openconnection.
   myCommand.Connection.Close();

 


指定坐标轴的数据显示范围
// Create a new random number generator
       Random rnd = new Random();

       // Add points to the stock chart series
       for (int index = 0; index < 10; index++)
       {
           Chart1.Series["Series1"].Points.AddXY(
               rnd.Next(10,90),               // X value is a date
               rnd.Next(40,50));    //Close Y value
       }

       Chart1.ChartAreas[0].AxisY.Minimum = 40;
       Chart1.ChartAreas[0].AxisY.Maximum = 50;

数据排序// Use point index for drawing the chart
   Chart1.Series["Series1"].IsXValueIndexed = true;

    // Sortseries points by second Y value
   Chart1.DataManipulator.Sort(PointSortOrder.Ascending, "Y2","Series1");

 

查找数据最大值和最小值
// Find point with maximum Y value and change color
    DataPointmaxValuePoint =Chart1.Series["Series1"].Points.FindMaxValue();
   maxValuePoint.Color = Color.FromArgb(255, 128, 128);
                                                                                               
    // Findpoint with minimum Y value and change color
    DataPointminValuePoint =Chart1.Series["Series1"].Points.FindMinValue();
   minValuePoint.Color = Color.FromArgb(128, 128, 255);

pie显示交互
private void Page_Load(object sender, System.EventArgs e)
{
    // Addseries to the chart
    Seriesseries = Chart1.Series.Add("My series");

    // Setseries and legend tooltips
   series.ToolTip = "#VALX: #VAL{C} million";
   series.LegendToolTip = "#PERCENT";
   series.PostBackValue = "#INDEX";
   series.LegendPostBackValue = "#INDEX";
           
    // Populateseries data
   double[]   yValues = {65.62, 75.54, 60.45, 34.73, 85.42, 32.12, 55.18, 67.15,56.24, 23.65};
   string[]   xValues = {"France", "Canada", "Germany", "USA", "Italy", "Russia","China", "Japan", "Sweden", "Spain" };
   series.Points.DataBindXY(xValues, yValues);

    // Setseries visual attributes
    series.Type= SeriesChartType.Pie;
   series.ShadowOffset = 2;
   series.BorderColor = Color.DarkGray;
   series.CustomAttributes = "LabelStyle=Outside";
}

protected void Chart1_Click(object sender, ImageMapEventArgse)
{
    intpointIndex = int.Parse(e.PostBackValue);
    Seriesseries = Chart1.Series["My series"];
    if(pointIndex >= 0 &&pointIndex < series.Points.Count)
    {
       series.Points[pointIndex].CustomProperties +="Exploded=true";
    }
}

chart点击事件/// <summary>
/// Page Load event handler.
/// </summary>
protected void Page_Load(object sender, System.EventArgs e)
{
   this.Chart1.Click += new ImageMapEventHandler(Chart1_Click);
   
    // directusing of PostBackValue
    foreach(Series series in this.Chart1.Series)
    {
       series.PostBackValue = "series:" + series.Name + ",#INDEX";
    }
   
    // transferof click coordinates. getCoordinates is a javascriptfunction.
    stringpostbackScript =ClientScript.GetPostBackEventReference(this.Chart1,"chart:@");
   this.Chart1.Attributes["onclick"] = postbackScript.Replace("@'", "'+ getCoordinates(event)");

}


/// <summary>
/// Handles the Click event of the Chart1 control.
/// </summary>
/// <param name="sender">The sourceof the event.</param>
/// <param name="e">The<seecref="System.Web.UI.WebControls.ImageMapEventArgs"/>instance containing the eventdata.</param>
protected void Chart1_Click(object sender, ImageMapEventArgse)
{
   this.Chart1.Titles["ClickedElement"].Text = "Nothing";

    string[]input = e.PostBackValue.Split(':');
    if(input.Length == 2)
    {
       string[] seriesData = input[1].Split(',');
       if (input[0].Equals("series"))
       {
           this.Chart1.Titles["ClickedElement"].Text = "Last Clicked Element:" + seriesData[0] + " - Data Point #" + seriesData[1];
       }
       else if (input[0].Equals("chart"))
       {
           // hit test of X and Y click point
           HitTestResult hitTestResult =this.Chart1.HitTest(Int32.Parse(seriesData[0]),Int32.Parse(seriesData[1]));
           if (hitTestResult != null)
           {
               this.Chart1.Titles["ClickedElement"].Text = "Last Clicked Element:" + hitTestResult.ChartElementType.ToString();
           }
       }
    }
}

你可能感兴趣的:(chart)