第 3 課:擷取報表定義的欄位清單
因為每一個報表定義都應該擁有表示報表資料的欄位清單,所以您必須從查詢中產生欄位清單。
若要產生欄位清單
- 以下列程式碼取代專案中 GenerateFieldsList() 方法的程式碼:
Public Sub GenerateFieldsList()
Dim command As SqlCommand
Dim reader As SqlDataReader
' Executing a query to retrieve a fields list for the report
command = m_connection.CreateCommand()
m_commandText = "SELECT Person.CountryRegion.Name AS CountryName, Person.StateProvince.Name AS StateProvince " + "FROM Person.StateProvince " + "INNER JOIN Person.CountryRegion ON Person.StateProvince.CountryRegionCode = Person.CountryRegion.CountryRegionCode " + "ORDER BY Person.CountryRegion.Name"
command.CommandText = m_commandText
' Execute and create a reader for the current command
reader = command.ExecuteReader(CommandBehavior.SchemaOnly)
' For each field in the resultset, add the name to an array list
m_fields = New ArrayList()
Dim i As Integer
For i = 0 To reader.FieldCount - 1
m_fields.Add(reader.GetName(i))
Next i
End Sub 'GenerateFieldsList
public void GenerateFieldsList()
{
SqlCommand command;
SqlDataReader reader;
// Executing a query to retrieve a fields list for the report
command = m_connection.CreateCommand();
m_commandText =
"SELECT Person.CountryRegion.Name AS CountryName, Person.StateProvince.Name AS StateProvince " +
"FROM Person.StateProvince " +
"INNER JOIN Person.CountryRegion ON Person.StateProvince.CountryRegionCode = Person.CountryRegion.CountryRegionCode " +
"ORDER BY Person.CountryRegion.Name";
command.CommandText = m_commandText;
// Execute and create a reader for the current command
reader = command.ExecuteReader(CommandBehavior.SchemaOnly);
// For each field in the resultset, add the name to an array list
m_fields = new ArrayList();
for (int i = 0; i <= reader.FieldCount - 1; i++)
{
m_fields.Add(reader.GetName(i));
}
}