1. 程式人生 > >C# Chart控制元件的使用總結

C# Chart控制元件的使用總結

最近一直在畫圖表,總結一下,方便以後參考。

1、  圖表的各種屬性

對不起,我太懶了,詳情看如下的連結吧。。。。

2、關於圖表的資料來源

(1)來自SQL server

         此時就可以用查詢語句,來獲取你要用到的資料

(要引用如下名稱空間:

using System.Data.SqlClient;

usingSystem.Windows.Forms.DataVisualization.Charting;)

       SqlConnection mycon;

 SqlDataAdaptermyda;

DataSet myds;

stringcon, sql;

con ="Server=(local);Database=OutputDB;Trusted_Connection=SSPI"

;

sql = "select * fromMachineStsTable where " +"日期>= " +"'" + dateTimePicker1.Value.ToString("yyyyMMdd")+ "'"+"AND日期<= " +"'" +dateTimePicker2.Value.ToString("yyyyMMdd ")+"'";          

mycon =newSqlConnection(con);

mycon.Open();

myda =newSqlDataAdapter(sql,con);

此時,chart1的資料來源有3種繫結方式。

方式一:直接將要查詢的那張表的表名繫結上去

myds=newDataSet();

myda.Fill(myds,"MachineStsTable");

mycon.Close();

chart1.DataSource= myds.Tables["MachineStsTable"];

對應的圖表X軸、Y軸繫結資料如下:

1MachineStsTable的詳情

序列1Series[0])的繫結方式如下:

chart1.Series[0].XValueMember= "日期"

chart1.Series[0].YValueMembers= "全生產線"

chart1.Series[0].LegendToolTip ="全生產線"

;//滑鼠放到系列上出現的文字

chart1.Series[0].LegendText ="全生產線";//系列名字

chart1.Series[0].XValueType =ChartValueType.Date;

chart1.Series[0].ChartType= SeriesChartType.Line;

剩下的其它序列繫結同上。。

由此看出,此種方式只適合要顯示的序列比較少的情況。。還是建議用方式2,將表複製到DataTable的例項中。

方式二:用新定義的DataTable型別的dt來繫結

DataTable dt =newDataTable("MachineStsTable");

myda.Fill(dt);

mycon.Close();

chart1.DataSource = dt;

注:此時是因為藉助mydadt已經將整個表複製了過來,不然還要人為新增表的內容。。。

對應的圖表X軸、Y軸繫結資料如下:

for(inti = 0; i < dt.Columns.Count -2; i++)

{

chart1.Series[i].XValueMember = dt.Columns[1].ColumnName;

chart1.Series[i].YValueMembers = dt.Columns[i + 2].ColumnName;

chart1.Series[i].LegendToolTip = dt.Columns[i + 2].ColumnName;//滑鼠放到系列上出現的文字

chart1.Series[i].LegendText = dt.Columns[i + 2].ColumnName;//系列名字

chart1.Series[i].XValueType =ChartValueType.DateTime;

chart1.Series[i].ChartType =SeriesChartType.StackedColumn;               

}

這種就非常適合Y軸種類特別多的情況。。。。一個迴圈,搞定所有。。。

方式三:用類似chart1.Series[0].Points.DataBindXY(iXAxis,fTargetOT);中的DataBindXYX,Y)來繫結資料。。其中,X是一個數組,Y也是陣列,在繫結之前需要對陣列中的每個元素賦值,例子如下(同樣是上述圖1中的表格):

DataTable dt =newDataTable("MachineStsTable");

myda.Fill(dt);

mycon.Close();

//chart1.DataSource = dt;(這句話就不要了,因為下面會一一賦值)

if (dt.Rows.Count == 0)

{

return;

}

DateTime[] iXAxis =newDateTime[dt.Rows.Count];

DateTime[] dtXAxis =newDateTime[dt.Rows.Count];

float[]fDownTime =newfloat[dt.Rows.Count];//全生產線

float[]fDownTime1 =newfloat[dt.Rows.Count];//繞線機

float[]fDownTime2 =newfloat[dt.Rows.Count];

………………直至

float[]fDownTime10=newfloat[dt.Rows.Count];

for(inti = 0; i < dt.Rows.Count; i++)

{

// dtXAxis[i] =(DateTime)dt.Rows[i][1];

iXAxis[i] = (DateTime)dt.Rows[i][1];

fDownTime[i]=float.Parse(dt.Rows[i][2].ToString());

fDownTime1[i]=float.Parse(dt.Rows[i][3].ToString());

fDownTime2[i]=float.Parse(dt.Rows[i][4].ToString());

………………直至  

fDownTime10[i]=float.Parse(dt.Rows[i][12].ToString());  

}

chart1.Series[0].XValueType =ChartValueType.DateTime;

chart1.Series[0].Points.DataBindXY(iXAxis, fDownTime);

chart1.Series[0].LegendToolTip ="全生產線";//滑鼠放到系列上出現的文字

chart1.Series[0].LegendText ="全生產線";//系列名字

chart1.Series[0].ChartType =SeriesChartType.StackedColumn;

另外的10個序列的繫結方式如上述序列1Series[0])。。

此種方式,適合,讀過來的資料需要進行處理的情況,如果不需要處理,而且列特別多,則不建議使用這種方式,用方式二比較方便。

2)來自Web Api。。

這種要跟寫Web Api的工程師對接,知道呼叫方式,才能按照他返回的資料格式,來繫結資料來源。方式同來源於SQL Server。。。

此時也建議根據要顯示的情況,建立一個DataTable,再對錶的列和行進行賦值,再按(1)中的方式二來進行繫結。大致例子如下:

DateTime[] dtXAxis =newDateTime[device_faultdescs.Count];

System.Data.DataTable myTab =newSystem.Data.DataTable("His");

myTab.Columns.Add("ID",Type.GetType("System.Int32"));

myTab.Columns[0].AutoIncrement =true;

myTab.Columns[0].Unique =true;

myTab.Columns[0].AutoIncrementSeed = 1;

myTab.Columns[0].AutoIncrementStep = 1;

myTab.Columns.Add("Xvalue",Type.GetType("System.DateTime"));

myTab.Columns.Add("停機型別",Type.GetType("System.String"));

               //給要新增的列,動態新增列名,以及對應列下的資料型別。。。

for (intj = 0; j < device_faultdescs[0].desc.Count; j++)

{

myTab.Columns.Add(device_faultdescs[0].desc[j].desc,Type.GetType("System.Double"));

}

         for(inti = 0; i < device_faultdescs.Count; i++)

{

DataRow newRow = myTab.NewRow();

for(intj = 0; j < device_faultdescs[i].desc.Count; j++)

{

newRow[device_faultdescs[i].desc[j].desc] =Math.Round(device_faultdescs[i].desc[j].downtime,2);

newRow["ID"] = i;

newRow["Xvalue"] =DateTime.Parse(Program.mainForm.dateTimePicker1.Value.ToString("yyyy-MM-dd"));

newRow["停機型別"] = device_faultdescs[i].devicename;

//    myTab.Rows.Add(new object[] { null,scraps[i].dt, scraps[i].detail[j].count });    

// myTab.Rows[i]

}

myTab.Rows.Add(newRow);

}

//動態建立序列在chart2

    chart2.DataSource = myTab;

chart2.Series.Clear();

for (inti = 0; i < myTab.Columns.Count-3; i++)

{

chart2.Series.Add(i.ToString());//新增

}

      for (intj = 0; j < myTab.Columns.Count - 3; j++)

{

chart2.Series[j].XValueMember = myTab.Columns[2].ColumnName;

chart2.Series[j].YValueMembers = myTab.Columns[j + 3].ColumnName;

      chart2.Series[j].LegendToolTip =myTab.Columns[j + 3].ColumnName;//滑鼠放到系列上出現的文字

chart2.Series[j].LegendText = myTab.Columns[j + 3].ColumnName; //系列名字

chart2.Series[j].XValueType =ChartValueType.String;

chart2.Series[j].ChartType =SeriesChartType.StackedColumn;

}

3)來自單獨的資料

動態新增序列,

chart3.Series.Clear();

Series seriesDownTime =newSeries("DownTime");//此時就新增一個序列,chart3.Series[0]

seriesDownTime.ChartType =SeriesChartType.Column;

//比如要新增的內容放在了陣列X和陣列Y中,則新增第一個值可以如下新增:

seriesDownTime.Points.AddXY(X[0],Y[0]);

下一個值與之類似,直到把很少的幾個點新增完成即可。。。

此種方式適合要顯示在圖表上的只有少量的幾個點,如果資料眾多,建議按集合來新增。

3、  常用的屬性

chart1.Series[0].ChartType =SeriesChartType.Line;//設定曲線型別

chart1.Series[0].XValueType =ChartValueType.DateTime;//設定X軸繫結值的型別

chart1.Series[0].LegendToolTip ="Target Output";//滑鼠放到系列上出現的文字

chart1.Series[0].LegendText ="Target Output";//系列名字

chart1.ChartAreas[0].AxisX.Minimum = 1;//座標最小值,這樣的話,X軸座標是從1開始

chart1.Series[0].IsValueShownAsLabel =true;//值作為標籤顯示在圖表中

chart1.Series[0].BorderWidth = 3;//設定線寬

chart1.ChartAreas[0].AxisX.Interval = 1;//設定X軸間距,這樣的話,就間距固定為1

double max = 120, min = 0;

chart1.ChartAreas[0].AxisY.Maximum = max;//設定Y軸最大值

chart1.ChartAreas[0].AxisY.Minimum = min; //設定Y軸最小值

大致就是這些,後續有什麼想起來的,再補充。。。

 //設定座標軸標題
                chart1.ChartAreas[0].AxisX.Title = "不良型別";               
                chart1.ChartAreas[0].AxisY.Title = "複檢個數";
                chart1.ChartAreas[0].AxisY2.Title = "NG複檢百分比(%)";
                //設定座標軸標題的字型
                chart1.ChartAreas[0].AxisX.TitleFont = new Font("宋體",12F);
                chart1.ChartAreas[0].AxisY.TitleFont = new Font("宋體", 12F);
                chart1.ChartAreas[0].AxisY2.TitleFont = new Font("宋體", 12F);                 //設定座標軸柵格是否可見。。
                chart1.ChartAreas[0].AxisX.MajorGrid.Enabled = false;
                chart1.ChartAreas[0].AxisY.MajorGrid.Enabled = false;
                chart1.ChartAreas[0].AxisY2.MajorGrid.Enabled = false;            

相關推薦

C# Chart控制元件的使用總結

最近一直在畫圖表,總結一下,方便以後參考。 1、  圖表的各種屬性 對不起,我太懶了,詳情看如下的連結吧。。。。 2、關於圖表的資料來源 (1)來自SQL server          此時

C#chart控制元件的應用

本人正在寫一個“鋰離子成分容上位機軟體“”,裡面需要用到chart控制元件,需要讀取老師提供的一個檔案,並將檔案中的資料在chart控制元件中通過曲線圖的形式顯示出來,請問需要怎麼解決呢? private void 開啟ToolStripMenuItem_Click(object sender,

C# Chart控制元件chart、Series、ChartArea曲線圖繪製的重要屬性

迴圈設定  chart1.Series[0].Points[i].ToolTip =  “” ;   可以通過 i 定位到 Dt中的資料直接設定 chart1.Series[0].ToolTip =""; 只能設定Xy軸的值。8個月沒寫部落格了- -,一來是有不想繼續幹開發的

c#中chart控制元件如何新增輔助的警示線啊(參考線)

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] st = sc.nextLine().split("

C# numericUpDown控制元件用法總結及注意事項

numericUpDown控制元件在使用的過程當中,有些用法會不太一樣,下面做一總結。 1. 判斷numericUpDown的value屬性是否為空        使用過Numericupdown控制元件的童鞋初期應該都會碰到一個奇怪的問題,在刪除了控制元件裡的值之後,裡

C#控制元件總結方便記憶

C#常用控制元件屬性及方法介紹                                    

C#用serialPort和chart控制元件實現簡單波形繪製

先看最終的效果圖: 主要實現功能是將串列埠傳送過來的資料按波形顯示 注:本例是以串列埠除錯助手和虛擬串列埠VSPD軟體模擬串列埠傳送資料的,詳細說明見下文 說明: serialPort的ReadByte()方法用於從System.IO.Ports.SerialPort輸入

c#通過.net自帶的chart控制元件繪製餅圖pie chart

原文地址:http://www.veryhuo.com/a/view/52954.html 需要實現的目標是:   1.將資料繫結到pie的後臺資料中,自動生成餅圖。   2.生成的餅圖有詳細文字的說明。   具體的實現步驟:   >>前臺介面的設

C# WinForm開發系列之c# 通過.net自帶的chart控制元件繪製餅圖,柱形圖和折線圖的基礎使用和擴充套件

一.需要實現的目標是: 1.將資料繫結到pie的後臺資料中,自動生成餅圖。 2.生成的餅圖有詳細文字的說明。 1.設定chart1的屬性Legends中預設的Legend1的Enable為false; 如圖1所示: 圖1 2.設定Series的ChartT

從0自學C#08--繪製曲線chart控制元件

chart控制元件的使用 本文介紹如何使用工具箱裡的chart控制元件,繪製多條曲線。效果圖如下: 1.InitializeChart 在窗體裡新增chart控制元件,然後在屬性裡清空ChartAreas、Legends和Series集合,它們會由下面

C#對於控制元件ckeditor使用總結

  今天做專案使用到ckeditor控制元件,自己對其中的使用總結:  對於控制元件的使用:   1.下載了完整的程式之後,先要對程式中的不必要的東西進行刪除。凡是檔名或資料夾名前面有"_"的檔案或資料夾都可以刪除,這些檔案是一些說明檔案或者例項檔案。另外,./lang資料

C#UI控制元件使用總結

1、ImageList ImageList imageList = new ImageList(); for (int i = 0; i < 10; i++) {

c# DataGridView控制元件使用

DataGridView 動態新增新行:   DataGridView控制元件在實際應用中非常實用,特別需要表格顯示資料時。可以靜態繫結資料來源,這樣就自動為DataGridView控制元件新增相應的行。假如需要動態為DataGridView控制元

C# 公共控制元件之ListBox

  Winform控制元件ListBox的用法 1、如何新增listBox的值 this.listBox1.Items.Add("張曉東"); 2、如何判斷listBox集合是否新增過 //檢查新增值是否新增過 if(this.listBox1.items.Contai

C# 公共控制元件之Checkbox和CheckedListBox

Winform的開發基本都是基於控制元件事件的,也就是事件驅動型的。 多選框的放置和值的獲取有很多種,這裡介紹幾個簡單常用的方法 1、直接放置Checkbox,並獲取Checkbox的值 上圖 做法也非常簡單,就是在form中放置多個checkbox,然後迴圈遍歷,檢查其checke

C# 公共控制元件之RadioBox ,CheckBox

通常RadioBox稱為單選按鈕,CheckBox稱為多選按鈕,這兩個控制元件都是從ButtonBase類中派生,可以將其視為按鈕。   多個checkBox之間的選擇是互相獨立的,互補影響。多個RadioButton之間是互斥的,只能選擇其中一個。同一個容器下的多個RadioButton之間互

C# 公共控制元件之NotifyIcon 將視窗最小化到托盤

  1、設定窗體和notifyIcon屬性 notifyIcon  ,新增contextMenuStrip控制元件並整合到notifyIcon  的ContextMenuStrip上。 窗體 2、程式碼 using System; usi

C# 公共控制元件之maskedTextBox

IP地址框 1、新增 maskedTextBox 控制元件 2、設定屬性 3、設定MouseLeave事件 private void IPAddressOnMouseLeave(object sender, EventArgs e) { int i=0;

C# 公共控制元件之 dateTimePicker

此控制元件用起來簡單 public Form1() { InitializeComponent(); // Set the MinDate and MaxDate. dateTimePicker1.MinDate = new DateTime(1985, 6, 20);

C# 公共控制元件之ListView

private void InitListView() { // Create a new ListView control.或者 用工具箱 ListView listView1 = new ListView();