Lección 3: Recuperar una lista de campos para la definición de informe

Dado que todas las definiciones de informe deben tener una lista de campos que represente los datos del informe, debe generar una lista de campos a partir de la consulta.

Para generar una lista de campos

  • Reemplace el código del método GenerateFieldsList() del proyecto por el código siguiente:
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));
   }
}