【TeeChart .NET教程】(八)ADO.NET數據庫訪問
【下載TeeChart.Net最新版本】
(一)簡介
將TeeChart連接到ADO.NET數據庫可以在設計時使用TeeChart編輯器完成,并在運行時使用幾行代碼完成,任何Series都可以使用TeeChart Editor連接到ADO.NET表或查詢。每個系列都可以使用相同或不同的ADO.NET數據庫連接到相同或不同的表或查詢,此設計為用戶提供了如何將圖表連接到數據庫的完全靈活性,因為用戶不僅限于一個數據庫,也不僅限于一個表或查詢。在設計時也會檢索數據,因此用戶可以在開發期間查看實際數據。
(二)在設計時連接到ADO.NET
2.1 DataAdapter [VS2003]
在設計時,將Series連接到ADO.NET數據源所需的步驟是:
- 從VS.NET ToolBox的Data選項卡中,將OleDbDataAdapter拖到WinForm上,并在其上添加TeeChart for .Net對象。
- 單擊“Data Adapter Configuration Wizard(數據適配器配置向導)”上的“Next”,然后在下一頁上單擊“New Connection...(新建連接...)”按鈕。
- 現在單擊新窗口的“Provider”選項卡,然后選擇“Microsoft Jet OLE DB Provider”,如下圖所示:
- 現在單擊同一窗口的“Connection”選項卡,然后從TeeChart for .Net根目錄下的Sample Data文件夾中選擇TeeChart.mdb文件:
- 單擊“Test Connection”按鈕以測試連接,然后單擊同一窗口的“OK”按鈕。
- 單擊Data Adapter Configuration Wizard窗口的“Next”按鈕,從出現的窗口中選擇“Use SQL Statements”,然后再次單擊“Next”按鈕。
- 單擊“Query Builder”按鈕并添加“Employee”表。關閉“Add Table”窗口并選擇“*(All Columns)”復選框:
- 確定此窗口,單擊“Next”,然后單擊“Finish”。
- 打開TeeChart Editor,添加BarSeries并導航到Series選項卡的DataSource選項卡。
- 從ComboBox中選擇“Database”,從DataSet ComboBox中選擇oleDbDataAdapter1 [System.Data.OleDb.OleDbDataAdapter]。
- 將標簽設置為“LASTNAME”,將Y設置為“SALARY”,如下圖所示:
- 單擊Apply按鈕并運行表單,應該有以下內容:
2.2 BindingSource [VS2005,VS2008,VS2010,VS2012,VS2013]
在設計時,將Series連接到ADO.NET數據源所需的步驟如下:
- 從VS.NET ToolBox的Data選項卡中,將BindingSource拖到一個帶有TeeChart for .Net對象的WinForm上。
- 轉到Data選項卡,然后選擇“Show Data Source”
- 右鍵單擊“Data Source”工具箱,然后選擇“Add New Data Source”。
- 選擇Database,選擇/創建連接字符串,使用Microsoft Access DataBase File(OLE DB),單擊continue:
注意:單擊“Test Connection”按鈕以檢查數據源的連接。
- 最后在Browse中選擇要連接的表:
- 從“data source”工具箱中選擇要用作數據源的表,然后將其拖到表單中。
- 打開TeeChart Editor,添加BarSeries并導航到Series選項卡的DataSource選項卡。
- 從ComboBox中選擇“Database”,從DataSet ComboBox中選擇bindingSource1。
- 將標簽設置為“LASTNAME”,將Y設置為“SALARY”,如下圖所示:
- 單擊Apply按鈕并運行表單,有以下內容:
2.3 單記錄
單記錄圖表允許在TeeChart上顯示來自單個數據庫記錄的所有或一些記錄。它對數據庫視圖或表有用,例如,每年的銷售數據存儲為單獨的月份列,“JAN”,“FEB”,“MAR”等。并逐步顯示記錄顯示連續幾年的月銷售額,單記錄圖表支持數據集,表格和數據視圖,使用圖表編輯器選擇單個記錄作為圖表系列的數據源類型。
連接單記錄數據所需的大多數步驟都是通過圖表編輯器實現的,要導航數據源并相應地更新圖表,需要使用Windows.Form的CurrencyManager編寫幾行代碼。
(三)在運行時連接到ADO.NET
3.1 [VERSION .NET 2003] DataAdapter
上述設計時步驟可以用幾行代碼以編程方式重現。這使用戶可以更自由地控制數據庫操作。每個Series都有“DataSource”屬性,它確定數據庫值的來源(表或查詢),以及“YValues.DataMember”和“LabelMember”屬性,以指定我們要繪制的字段。將新的TeeChart for .Net對象拖到新項目和新表單上。
[C#.Net]
using System.Data; using System.Data.OleDb; using System.Security; using System.Security.Permissions; private void Form1_Load(object sender, System.EventArgs e) { DataSet masterDataSet = new DataSet(); Bar bar1 = new Bar(tChart1.Chart); try { OpenConnWithJet40(ref masterDataSet); DataTable employeeTable = masterDataSet.Tables["EMPLOYEE"]; bar1.YValues.DataMember = employeeTable.Columns["SALARY"].ToString(); bar1.LabelMember = employeeTable.Columns["LASTNAME"].ToString(); bar1.DataSource = employeeTable; } catch (SecurityException) { MessageBox.Show("The calling method has not been granted sufficient permission to access the Microsoft Jet 4.0 OLE DB Provider."); } } [OleDbPermission(SecurityAction.Demand, Provider = "Microsoft.Jet.OLEDB.4.0")] private void OpenConnWithJet40(ref DataSet masterDataSet) { OleDbConnection testConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + @"Data Source=C:\Program Files\Steema Software\TeeChart for .NET v3\Sample data\TeeChart.mdb;"); testConn.Open(); string strCom = "SELECT * FROM Employee"; OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom,testConn); myCommand.Fill(masterDataSet, "Employee"); testConn.Close(); }
[VB.Net]
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim MasterDataSet As New DataSet() Dim Bar1 As New Steema.TeeChart.Styles.Bar(TChart1.Chart) Try OpenConnWithJet40(MasterDataSet) Dim employeeTable As DataTable = MasterDataSet.Tables("Employee") Bar1.YValues.DataMember = employeeTable.Columns("SALARY").ToString() Bar1.LabelMember = employeeTable.Columns("LASTNAME").ToString() Bar1.DataSource = employeeTable Catch ex As Exception MessageBox.Show("Microsoft Jet 4.0 OLE DB Provider problem: " & ex.Message) End Try End Sub Private Sub OpenConnWithJet40(ByRef MasterDataSet As DataSet) Dim TestConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Program Files\Steema Software\TeeChart for .NET v3\Sample data\TeeChart.mdb;") TestConn.Open() Dim StrCom As String = "SELECT * FROM Employee" Dim MyCommand As New OleDbDataAdapter(StrCom, TestConn) MyCommand.Fill(MasterDataSet, "Employee") TestConn.Close() End Sub End Class
3.2 [VERSION .NET 2005] DataAdapter
[C#.Net]
using System.Data; using System.Data.OleDb; using System.Security; using System.Security.Permissions; private void Form1_Load(object sender, EventArgs e) { //string ConnString = SqlDataSource1.ConnectionString; string sQuery = "select * from Employee"; //SqlConnection myConnection = new SqlConnection(ConnString); string myConnString = "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\Program Files\\Steema Software\\TeeChart for .NET v3\\Sample data\\TeeChart.mdb;Uid=Admin;Pwd=;"; System.Data.Odbc.OdbcConnection myConnection = new System.Data.Odbc.OdbcConnection(myConnString); //SqlCommand myCommand = new SqlCommand(sQuery, myConnection); System.Data.Odbc.OdbcCommand myCommand = new System.Data.Odbc.OdbcCommand(sQuery, myConnection); myConnection.Open(); //SqlDataReader myReader = myCommand.ExecuteReader(); System.Data.Odbc.OdbcDataReader myReader = myCommand.ExecuteReader(); int XColumn = myReader.GetOrdinal("ID"); int YColumn = myReader.GetOrdinal("SALARY"); int LabelColumn = myReader.GetOrdinal("LASTNAME"); Steema.TeeChart.Styles.Bar bar1 = new Steema.TeeChart.Styles.Bar(tChart1.Chart); while (myReader.Read()) { bar1.Add(Convert.ToInt32(myReader[XColumn]), Convert.ToDouble(myReader[YColumn]), Convert.ToString(myReader[LabelColumn])); } myReader.Close(); myConnection.Close(); }
[VB.Net]
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim MasterDataSet As New DataSet() Dim Bar1 As New Steema.TeeChart.Styles.Bar(TChart1.Chart) Try OpenConnWithJet40(MasterDataSet) Dim employeeTable As DataTable = MasterDataSet.Tables("EMPLOYEE") Bar1.YValues.DataMember = employeeTable.Columns("SALARY").ToString() Bar1.LabelMember = employeeTable.Columns("LASTNAME").ToString() Bar1.DataSource = employeeTable Catch ex As Exception MessageBox.Show("Microsoft Jet 4.0 OLE DB Provider problem: " & ex.Message) End Try End Sub Private Sub OpenConnWithJet40(ByRef MasterDataSet As DataSet) Dim TestConn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=C:\Program Files\Steema Software\TeeChart for .NET v3\Sample data\TeeChart.mdb;") TestConn.Open() Dim StrCom As String = "SELECT * FROM Employee" Dim MyCommand As New OleDb.OleDbDataAdapter(StrCom, TestConn) MyCommand.Fill(MasterDataSet, "Employee") TestConn.Close() End Sub End Class
如果數據庫值已更改,并且想要“refresh”連接并再次檢索值,則應執行以下操作:
TChart1.Series(0).CheckDataSource
“CheckDataSource”方法將強制Series再次檢索所有記錄,所有系列都有“XValues.ValueSource”屬性,此屬性僅用于XY圖表(為每個點設置X坐標時)。
3.3 單記錄
連接使用圖表編輯器將在表格的初始化中創建以下代碼,可以在運行時使用類似的代碼來創建和連接新的SingleRecord數據源。
(假設一個名為sourceTableSet的DataSet,帶有table:sourceTable)
this.singleRecordSource1 = new Steema.TeeChart.Data.SingleRecordSource(); this.sourceTableSet.DataSetName = "NewDataSet"; this.sourceTableSet.Tables.AddRange(new System.Data.DataTable[] {this.sourceTable}); this.singleRecordSource1.DataSource = this.sourceTableSet; this.singleRecordSource1.ValueMembers = new string[] { "JAN", "FEB", "MAR"}; this.bar1 = new Steema.TeeChart.Styles.Bar(); this.bar1.DataSource = this.singleRecordSource1;
表格導航 TeeChart的SingleRecord使用CurrencyManager組件導航數據庫表并更新圖表。更改表記錄后,使用CheckDatasource更新圖表。例:
private CurrencyManager myCurrencyManager; public void ConnectChartToTable() { myCurrencyManager = (CurrencyManager)this.BindingContext[sourceTable]; singleRecordSource1.RecordCurrency=myCurrencyManager; tChart1[0].CheckDataSource(); }
可以使用CurrencyManager導航表(圖表)
private void MovePrevious() { if (myCurrencyManager.Position>0) { myCurrencyManager.Position=myCurrencyManager.Position+1; tChart1[0].CheckDataSource(); } } private void MoveNext() { if (myCurrencyManager.Position < myCurrencyManager.Count) { myCurrencyManager.Position=myCurrencyManager.Position+1; tChart1[0].CheckDataSource(); } }
(四)在ASP.NET中使用ADO.NET
用戶可以使用ASP.NET WebForm上的TeeChart WebChart通過ASP.NET連接數據源,其方式幾乎與數據源可以連接到WinForm上的TeeChart組件的方式相同。