在报表设计时,您可以通过区域报表的报表数据源对话框连接到一个数据源,您可以通过以下几种方式来访问报表数据源对话框:
•在详细区域,点击数据源图标。
•点击设计界面的灰色区域,在属性窗口底部的命令区域,点击编辑数据源命令。
在数据源对话框中提供了常见的四种数据源类型。
以下步骤将展示如何绑定数据源,以下操作前提是您已经在Visual Studio中添加了ActiveReports 的区域报表模板。
l 使用 OLE DB 数据源
1. 在报表详细区域,点击灰色的报表数据源图标,打开报表的数据源对话框。
2. 在 OLE DB 标签中, 旁边的连接字符串,单击“生成” 按钮。
3. 在数据链接属性窗口中,选择Microsoft Jet 4.0 OLE DB提供程序 ,并单击“下一步” 按钮。
4. 单击省略号 (...) 按钮,浏览到您的数据库或Northwind示例数据库 。 选择需要的访问路径,点击“ 打开 ”。
5. 单击“确定” 关闭该窗口,并填写连接字符串字段。
6. 在查询字段中,输入一个SQL查询,选择您想要的数据。例如
Select * From CUSTOMERS |
7. 单击“确定”来保存数据源,并返回到报表设计视图。
l 使用SQL 数据源
1. 在报表详细区域,点击灰色的报表数据源图标,打开报表的数据源对话框。
3. 在数据链接属性窗口中,选择 “Microsoft OLE DB Provider for SQL Server 单击“下一步”按钮。
4. 单击“确定” 关闭该窗口,并填写连接字符串字段。
5. 在查询字段中,输入一个SQL查询,选择您想要的数据。例如
|
6. 单击“确定” 来保存数据源,并返回到报表设计图 。
l 使用 XML 数据源
1. 在报表详细区域,点击灰色的报表数据源图标,打开报表的数据源对话框。
3. 在打开文件窗口中,导航到您的XML数据文件,选择它,并点击打开按钮。(示例XML数据文件位于C:\Users\YourUserName\Documents\GrapeCity Samples\ActiveReports 9\Data\customer.xml)
4. 在记录集模式中,输入一个有效的XPath表达式。 (例如,//CUSTOMER)
5. 单击“确定”来保存数据源,并返回到报表设计图。
l 使用非绑定数据源
创建数据源链接
1、添加 System.Data 和 System.Data.Oledb 的命名空间。
2、右键单击灰色以外区域,在设计图面上选择报表,然后选择属性。
3、在属性窗口中,单击事件图标以查看可用的事件。
4、在事件列表中,双击ReportStart事件。
5、将下面的代码添加到处理程序中。
使用Visual Basic.NET创建数据源
Visual Basic.NET 代码, 粘贴在 ReportStart 事件之前。
Dim m_cnnString As String Dim sqlString As String Dim m_reader As OleDbDataReader Dim m_cnn As OleDbConnection |
Visual Basic.NET 代码, 粘贴在 ReportStart 事件内。
'Set data source connection string. m_cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ + "Data Source=C:\Users\YourUserName\Documents\GrapeCity Samples\ActiveReports 9\Data\Nwind.mdb;Persist Security Info=False" 'Set data source SQL query. sqlString = "SELECT * FROM categories INNER JOIN products ON categories.categoryid " _ + "= products.categoryid ORDER BY products.categoryid, products.productid" 'Open connection and create DataReader. m_cnn = New OleDb.OleDbConnection(m_cnnString) Dim m_Cmd As New OleDb.OleDbCommand(sqlString, m_cnn) If m_cnn.State = ConnectionState.Closed Then m_cnn.Open() End If m_reader = m_Cmd.ExecuteReader() |
使用 C# 建立数据源
C# 代码, 粘贴在 ReportStart 事件之前。
private static OleDbConnection m_cnn; private static OleDbDataReader m_reader; private string sqlString; private string m_cnnString; |
C# 代码, 粘贴在 ReportStart 事件内。
m_cnnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"C:\Users\YourUserName\Documents\GrapeCity Samples\ActiveReports 9\Data\Nwind.mdb;Persist Security Info=False"; //Set data source SQL query. sqlString = "SELECT * FROM categories INNER JOIN products" + " ON categories.categoryid = products.categoryid" + " ORDER BY products.categoryid, products.productid"; //Open connection and create DataReader. m_cnn = new OleDbConnection(m_cnnString); OleDbCommand m_Cmd = new OleDbCommand(sqlString,m_cnn); if(m_cnn.State == ConnectionState.Closed) { m_cnn.Open(); } m_reader = m_Cmd.ExecuteReader(); |
关闭数据源链接
1、右键单击灰色以外区域,在设计图面上选择报表,然后选择属性。
2、在属性窗口,单击事件图标以查看可用的事件。
3、在事件列表中,双击ReportEnd事件。创建 ReportEnd 事件的事件处理方法。
4、将下面的代码添加到处理程序。
Visual Basic.NET 代码。粘贴在 ReportEnd 事件内。
m_reader.Close() m_cnn.Close() |
C# 代码。粘贴在 ReportEnd 事件内。
m_reader.Close(); m_cnn.Close(); |
创建字段集合
1、右键单击灰色以外区域,在设计图面上选择报表,然后选择属性。
2、在属性窗口,单击事件图标以查看可用的事件。
3、在事件列表中,双击DataInitialize事件。创建报表 DataInitialize 事件的事件处理方法。
4、将以下代码添加到处理程序中。
Visual Basic.NET 代码。粘贴在DataInitialize事件内。
Fields.Add("CategoryName") Fields.Add("ProductName") Fields.Add("UnitsInStock") Fields.Add("Description") |
C# 代码。粘贴在DataInitialize事件内。
Fields.Add("CategoryName"); Fields.Add("ProductName"); Fields.Add("UnitsInStock"); Fields.Add("Description"); |
字段赋值
1、右键单击灰色以外区域,在设计图面上选择报表,然后选择属性。
2、在属性窗口,单击事件图标以查看可用的事件。
3、在事件列表中,双击FetchData事件。创建报表FetchData事件的事件处理方法。
4、将以下代码添加到处理程序中。
Visual Basic.NET 代码。粘贴在FetchData事件内。
Try m_reader.Read() Me.Fields("CategoryName").Value = m_reader("CategoryName") Me.Fields("ProductName").Value = m_reader("ProductName") Me.Fields("UnitsInStock").Value = m_reader("UnitsInStock") Me.Fields("Description").Value = m_reader("Description") eArgs.EOF = False Catch ex As Exception eArgs.EOF = True End Try |
C# 代码。粘贴在FetchData事件内。
try { m_reader.Read(); Fields["CategoryName"].Value = m_reader["CategoryName"].ToString(); Fields["ProductName"].Value = m_reader["ProductName"].ToString(); Fields["UnitsInStock"].Value = m_reader["UnitsInStock"].ToString(); Fields["Description"].Value = m_reader["Description"].ToString(); eArgs.EOF = false; } catch { eArgs.EOF = true; } |
提示: 若要在运行时查看已添加的数据,将控件添加到您的报表中,并将其数据字段属性设置为您创建的字段集合中的字段名称。
警告: 不能在 DataInitialize 和 FetchData 事件以外访问字段集合。不支持在这些事件之外访问字段集合,并且可能有不可预知的结果。
l 使用 IEnumerable 数据源
1、右击设计画面,并选择查看代码。
2、在类声明中添加以下代码:
Visual Basic.NET 代码。粘贴在报表类声明代码中。
Private datasource1 As IEnumerator(Of String) = Nothing Dim list As List(Of String)= Nothing Private Function GetIEnumerableData() As IEnumerable(Of String) For i As Integer = 1 To 10 list.Add(String.Format("TestData_{0}", i.ToString())) Next Return list End Function |
C# 代码。粘贴在报表类声明代码中。
private IEnumerator<string> datasource = null; private IEnumerable<string> GetIEnumerableData() { for (int i = 1; i <= 10; i++) { yield return string.Format("TestData_{0}", i.ToString()); } } |
3、右键单击灰色以外区域,在设计图面上选择报表,然后选择属性。
4、在属性窗口,单击事件图标以查看可用的事件。
5、双击DataInitialize事件。这将创建报表 DataInitialize 事件的事件处理方法。
6、将下面的代码添加到处理程序中。
Visual Basic.NET 代码。粘贴在DataInitialize 事件内。
Me.Fields.Add("TestField") Me.list = New List(Of String) datasource1 = GetIEnumerableData().GetEnumerator() |
C# 代码。粘贴在DataInitialize 事件内。
this.Fields.Add("TestField"); datasource = GetIEnumerableData().GetEnumerator(); |
7、重复步骤 3 和 4,在属性窗口中打开事件列表。
8、FetchData事件。这将创建报表 FetchData 事件的事件处理方法。
9、将下面的代码添加到处理程序中。
Visual Basic.NET 代码。粘贴在FetchData事件内。
If datasource1.MoveNext() Then Me.Fields("TestField").Value = datasource1.Current eArgs.EOF = False Else eArgs.EOF = True End If |
C# 代码。粘贴在FetchData事件内。
if (datasource.MoveNext()) { this.Fields["TestField"].Value = datasource.Current; eArgs.EOF = false; } else eArgs.EOF = true; |
提示: 若要在运行时查看已添加的数据,将控件添加到您的报表中,并将其数据字段属性设置为您创建的字段集合中的字段名称。