Chart的數據綁定非常靈活支持多種形式的數據綁定,現在主要介紹幾種常見的!!
一:關於數據源:
- 可以在圖表的設計界面,在屬性設置窗口中的Series屬性下的Points中添加需要的數據.
- 可以在圖表的設計界面中,在屬性中綁定一個數據源.
- 可以在后台代碼中,動態添加數據.
- 可以在后台代碼中設置一個或多個數據源,直接綁定到圖表中.
根據官方文檔的說法,只要是實現了IEnumerable接口 的數據類型,都可以綁定到圖表控件中,例如:DataView, DataReader, DataSet, DataRow, DataColumn, Array, List, SqlCommand, OleDbCommand, SqlDataAdapter, 及OleDbDataAdapter對象。
Chart控件支持多數據源的綁定,例如:X軸綁定一個數據集ds1,Y軸可以綁定另外一個數據集 ds2。
Chart控件的綁定方式一般有兩種,常規綁定及交叉表的綁定。
Chart控件的Y軸數據,支持一次綁定多個值,議會制時間、區域、使用量等之類的圖形。
三 數據綁定
1:最常見的綁定方式(XValueMember ,YValueMembers )
// 設置數據源,Ds是一個取出數據集的DataSet
chart1.DataSource = Ds;
// 分別設置圖表的X值和Y值
chart1.Series["Series1"].XValueMember = "Name";
chart1.Series["Series1"]. YValueMembers = "Sales";
// 綁定設置的數據
chart1.DataBind();
2: 直接節點綁定Points.DataBindXY
//myReader為取得的DataReader對象
Chart1.Series["Series1"].Points.DataBindXY(myReader, "Name", myReader, "Sales");
這種的沒大用過,和第一種差不多,不解釋
3:調用DataBind實現
//myReader 為dataread
Chart1.Series["Series1"].Points.DataBind(myReader, "Name", "Sales", "");
上面三種方法需要自己建立Series,要顯示兩個柱狀圖,像上面的例子中的圖形,那么得手動建立兩個Series,然后分別進行上面的綁定操作。也可在后台動態生成Series
4:交叉表綁定DataBindCrossTable
微軟的圖表控件提供了一個交叉表數據的綁定方法DataBindCrossTable,它可以根據數據動態的生成數據序列(Series),借用官方的例子,數據庫的表數據如下
我們先看看DataBindCrossTable的參數,它有兩個重載方法,分別是:
public void DataBindCrossTable (
IEnumerable dataSource,
string seriesGroupByField,
string xField,
string yFields,
string otherFields,
PointSortOrder sortingOrder
)
以及
public void DataBindCrossTable (
IEnumerable dataSource,
string seriesGroupByField,
string xField,
string yFields,
string otherFields
)
每個參數的含義如下:
dataSource
要綁定的數據源.
seriesGroupByField
要分組統計的數據字段名稱,例如按姓名、日期等.
xField
X軸綁定的字段名稱.
yFields
Y軸綁定的字段名稱,如果需要綁定多個字段,則用逗號將字段名分開.
otherFields
其它數據字段屬性,就是上面剛講的,標簽、提示、Url等屬性.
sortingOrder
設置數據是正確還是逆序排列.
例如:此時要以統計每個用戶的年銷售曲線,那么分組統計的字段名應該設置為Name,如下:
Chart1.DataBindCrossTable(
myReader,
"Name",
"Year" ,
"Sales",
"Label=Commissions{C}");
如圖:

這中方法好處就是可以輕松實現多個series的綁定。
需要注意的地方:
在進行Y軸數據綁定的時候,如果要綁定多個字段,默認情況會出錯,那是因為需要設置Y軸的可保存值數量,設置為你需要保存的數量即可,設置的地點在:Series-》YValuesPrePoint,設置為你需要顯示的個數即可。
五:行綁定,這種方法是利用循環將各個數據點綁定到圖標中。同樣可以實現交叉表綁定的效果
foreach (DataRow row in ds.Tables[0].Rows)
{
string seriesName=row["SalesRep"].ToString();
//動態添加Series
Chart1.Series.Add(seriesName);
//設置為曲線圖
Chart1.Series[seriesName].ChartType = SeriesChartType.Line;
Chart1.Series[seriesName].BorderWidth = 2;
for (int col = 1; col < ds.Tables[0].Columns.Count; col++)
{
string colName = ds.Tables[0].Columns[col].ColumnName;
int yVal = Convert.ToInt32(row[colName].ToString());
Chart1.Series[seriesName].Points.AddXY(colName, yVal);
}
}
如圖

這里介紹的只是比較簡單的數據綁定方法,在微軟給的例子當中都可以找到,如果興趣可以去下載
MSChart 下載
http://download.microsoft.com/download/c/c/4/cc4dcac6-ea60-4868-a8e0-62a8510aa747/MSChart.exe
如果要在VS2008IDE 環境中使用,需要安裝插件支持
MSChart_VisualStudioAddOn.exe
http://download.microsoft.com/download/e/6/f/e6fedd87-9119-4037-8da8-e5de429d940a/MSChart_VisualStudio
AddOn.exe
