绑定报表到一个数据源

在报表设计时,您可以通过区域报表的报表数据源对话框连接到一个数据源,您可以通过以下几种方式来访问报表数据源对话框:

      在详细区域,点击数据源图标。

点击数据源图标

      点击设计界面的灰色区域,在属性窗口底部的命令区域,点击编辑数据源命令。

在数据源对话框中提供了常见的四种数据源类型。

点击编辑数据源命令

 

以下步骤将展示如何绑定数据源,以下操作前提是您已经在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.     在报表详细区域,点击灰色的报表数据源图标,打开报表的数据源对话框。

使用SQL数据源

2.     SQL选项卡上,紧挨着连接字符串,单击“生成” 按钮。

3.     在数据链接属性窗口中,选择 “Microsoft OLE DB Provider for SQL Server 单击“下一步”按钮。

4.     单击“确定” 关闭该窗口,并填写连接字符串字段。

5.     在查询字段中,输入一个SQL查询,选择您想要的数据。例如

Select * From CUSTOMERS

6.     单击“确定” 来保存数据源,并返回到报表设计图 。

l 使用 XML 数据源

1.     在报表详细区域,点击灰色的报表数据源图标,打开报表的数据源对话框。

使用 XML 数据源

2.     在 XML 标签,紧挨着文件的URL,点击 ... 按钮。

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;

提示若要在运行时查看已添加的数据,将控件添加到您的报表中,并将其数据字段属性设置为您创建的字段集合中的字段名称。