Erstellen eines ListBox-Steuerelements zur Anzeige von Standardparametern

Im letzten Teil des Lernprogramms geht es um die Anzeige einer vollständigen Liste mit Standardwerten für das Parameterfeld in einem ListBox-Steuerelement sowie um das Neufiltern des Berichtinhalts auf der Grundlage der Auswahlen in diesem ListBox-Steuerelement.

In diesem Abschnitt erfahren Sie, wie Sie das ListBox-Steuerelement mit Standardwerten aus dem Parameterfeld auffüllen.

NoteAnmerkung

Beachten Sie, dass Sie bei der Erstellung dieses Berichts zu Beginn des Lernprogramms Standardwerte in Form einer umfangreichen Ortsliste festgelegt haben.

Es ist erforderlich, ein ListBox-Steuerelement hinzuzufügen und zu konfigurieren und dann eine Hilfsmethode zu erstellen, um das ListBox-Steuerelement mit Werten zu füllen.

So erstellen und konfigurieren Sie ein ListBox-Steuerelement im Formular

  1. Öffnen Sie das Web Form oder Windows Form.

  2. Klicken Sie im Menü Ansicht auf Designer.

  3. Gehen Sie bei Entwicklung einer Website wie folgt vor:

    • Klicken Sie auf das CrystalReportViewer-Steuerelement, um es auszuwählen.
    • Drücken Sie auf der Tastatur die NACH-LINKS-TASTE, so dass ein blinkender Cursor angezeigt wird, und drücken Sie dann die EINGABETASTE.
Das CrystalReportViewer-Steuerelement wird um eine Zeile nach unten verschoben.
  1. Gehen Sie bei Entwicklung eines Windows-Projekts wie folgt vor:

    • Klicken Sie auf das CrystalReportViewer-Steuerelement, um es auszuwählen.
    • Setzen Sie die Dock-Eigenschaft im Fenster Eigenschaften auf "Bottom"
      NoteAnmerkung

      Wenn Sie in Visual Studio die Dock-Eigenschaft auswählen, wird anstelle einer Liste von Optionen ein Rahmen angezeigt. Wählen Sie den Bereich des Rahmens aus, der "Bottom" entspricht.

    • Ändern Sie die Größe des Windows Forms und des CrystalReportViewer-Steuerelements, damit CrystalReportViewer genügend Platz zur Berichtanzeige bietet. Lassen Sie über dem CrystalReportViewer-Steuerelement genügend Platz für ein ListBox-Steuerelement.
    • Setzen Sie Anchor im Fenster Eigenschaften auf "Top", "Bottom", "Left", "Right".
    • Ändern Sie die Größe des Windows Forms und des CrystalReportViewer-Steuerelements, damit CrystalReportViewer genügend Platz zur Berichtanzeige bietet. Lassen Sie über dem CrystalReportViewer-Steuerelement genügend Platz für ein ListBox-Steuerelement.
  2. Ziehen Sie ein ListBox-Steuerelement aus der Toolbox über das CrystalReportViewer-Steuerelement.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\xkh1wxd8.alert_note(de-de,VS.90).gif" alt="Note" class="note" />Anmerkung</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Falls (bei Verwendung von Visual Studio) ein Smarttask auf dem ListBox-Steuerelement angezeigt wird, drücken Sie ESC, um es zu schließen.</p></td>
</tr>
</tbody>
</table>
  1. Klicken Sie auf das ListBox-Steuerelement, um es auszuwählen.

  2. Im Fenster Eigenschaften:

    • Setzen Sie ID oder Name auf "defaultParameterValuesList".
    • Setzen Sie SelectionMode auf "Multiple" (in einem Windows-Projekt auf "MultiExtended").
  3. Wählen Sie im Menü Datei die Option Alle speichern.

Sie können jetzt eine Hilfsmethode erstellen, durch die Standardwerte aus dem Parameterfeld abgerufen werden.

So erstellen Sie eine Hilfsmethode, durch die Standardwerte aus dem Parameterfeld abgerufen werden

  1. Öffnen Sie das Web Form oder Windows Form.

  2. Klicken Sie im Menü Ansicht auf Code.

  3. Erstellen Sie am Ende der Klasse eine neue private Methode mit dem Namen GetDefaultValuesFromParameterField(), durch die eine ArrayList-Instanz zurückgegeben wird, wobei ReportDocument an die Methodensignatur übergeben wird.

``` vb
Private Function GetDefaultValuesFromParameterField(ByVal myReportDocument As ReportDocument) As ArrayList

End Function
```

``` csharp
private ArrayList GetDefaultValuesFromParameterField(ReportDocument reportDocument)
{
}
```
  1. Rufen Sie innerhalb der GetDefaultValuesFromParameterField()-Methode die ParameterFieldDefinitions-Indexklasse ab, die aus der DataDefinition-Eigenschaft der ReportDocument-Instanz stammt.
``` vb
Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields
```

``` csharp
ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields;
```
  1. Rufen Sie die ParameterFieldDefinition-Instanz aus der ParameterFieldDefinitions-Indexklasse ab, die auf dem Indexeintrag der PARAMETER_FIELD_NAME-Konstanten basiert.

    Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(PARAMETER_FIELD_NAME)
    
    ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME];
    
  2. Rufen Sie eine ParameterValues-Indexklasse (als defaultParameterValues-Variable) aus der DefaultValues-Eigenschaft der ParameterFieldDefinition-Instanz ab.

    Dim defaultParameterValues As ParameterValues = myParameterFieldDefinition.DefaultValues
    
    ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues;
    
  3. Deklarieren und instantiieren Sie eine ArrayList.

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  4. Erstellen Sie eine foreach-Schleife, um die einzelnen ParameterValue-Instanzen aus defaultParameterValues abzurufen.

``` vb
For Each myParameterValue As ParameterValue In defaultParameterValues

Next
```

``` csharp
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
```

Erstellen Sie jetzt innerhalb der foreach-Schleife einen geschachtelten Bedingungsblock, der nach diskreten Parameterwerten (und nicht nach Bereichsparameterwerten) sucht. Es gibt zwei Versionen dieses Bedingungsblocks, da die API in höheren Versionen von Crystal Reports für Visual Studio geringfügig geändert wurde. Überprüfen Sie die API (mit Hilfe von IntelliSense), um festzustellen, welche Eigenschaft unter ParameterValue verfügbar ist:
  1. Wenn die verfügbare Eigenschaft IsRange lautet, geben Sie innerhalb der foreach-Schleife folgenden Code ein:

    If (Not myParameterValue.IsRange) Then
    
    End If
    
    if(!parameterValue.IsRange)
    {
    }
    
  2. Wenn die verfügbare Eigenschaft Kind (DiscreteOrRangeKind, eine Enumeration mit drei Werten: DiscreteValue, RangeValue, DiscreteAndRangeValue) lautet, geben Sie innerhalb der foreach-Schleife stattdessen folgenden Code ein:

    If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then
    
    End If
    
    if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue)
    {
    }
    
  3. Wandeln Sie die ParameterValue-Instanz innerhalb dieses geschachtelten Bedingungsblocks in ihre erweiterte Klasse DiscreteParameterValue um.

    Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)
    
    ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue;
    
  4. Fügen Sie der ArrayList-Instanz ebenfalls innerhalb des geschachtelten Bedingungsblocks die Value-Eigenschaft der (in eine Zeichenfolge konvertierten) ParameterDiscreteValue-Instanz hinzu.

    myArrayList.Add(myParameterDiscreteValue.Value.ToString())
    
    arrayList.Add(parameterDiscreteValue.Value.ToString());
    
  5. Geben Sie außerhalb des Bedingungsblocks und außerhalb der foreach-Schleife am Ende der Methode die ArrayList-Instanz aus der Methode zurück.

    Return myArrayList
    
    return arrayList;
    

So binden Sie die von der Methode zurückgegebene ArrayList an das ListBox-Steuerelement in einem Webprojekt

Sie haben die Standardwerte aus dem Parameterfeld abgerufen und sie als ArrayList aus der Methode zurückgegeben. Jetzt binden Sie diese ArrayList an das ListBox-Steuerelement defaultParameterValuesList.

Abhängig davon, ob Sie ein Webprojekt oder ein Windows-Projekt verwenden, weicht Ihr Code geringfügig ab. Entscheiden Sie sich deshalb, ob Sie im Folgenden die Web- oder die Windows-Prozedur ausführen möchten.

  1. Geben Sie in der ConfigureCrystalReports()-Methode direkt nach der Codezeile, durch die der ArrayList-Instanz der Zeichenfolgenwert "Tokyo" hinzugefügt wird, einige Zeilenumbrüche in den Code ein.

    Innerhalb dieser Zeilen können Sie jetzt zusätzlichen Code eingeben, durch den die Datenquelle für das ListBox-Steuerelement defaultParameterValuesList festgelegt wird, sobald die Seite erstmalig geladen wird.

  2. Erstellen Sie innerhalb der Zeilen einen Not IsPostBack-Bedingungsblock.

    If Not IsPostBack Then
    
    End If
    
    if(!IsPostBack)
    {
    }
    
    NoteAnmerkung

    Der Not IsPostBack-Bedingungsblock wird zum Einkapseln von Code verwendet, der nur beim erstmaligen Laden der Seite ausgeführt werden soll. Steuerelemente werden normalerweise an Datenwerte innerhalb von Not IsPostBack-Bedingungsblöcken gebunden, so dass deren Datenwerte (und eventuell nachfolgende Steuerelementereignisse) während des Neuladens der Seite nicht zurückgesetzt werden.

  3. Legen Sie die DataSource-Eigenschaft des ListBox-Steuerelements defaultParameterValuesList innerhalb des Not IsPostBack-Bedingungsblocks auf die GetDefaultValuesFromParameterField()-Hilfsmethode fest, und übergeben Sie die Instanz des Berichts "CustomersByCity" als Methodenparameter.

``` vb
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
```

``` csharp
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
```
  1. Rufen Sie, während Sie sich innerhalb des Not IsPostBack-Bedingungsblocks befinden, die DataBind()-Methode des ListBox-Steuerelements defaultParameterValuesList auf.
``` vb
defaultParameterValuesList.DataBind()
```

``` csharp
defaultParameterValuesList.DataBind();
```

So binden Sie die von der Methode zurückgegebene ArrayList an das ListBox-Steuerelement in einem Windows-Projekt

  1. Geben Sie in der ConfigureCrystalReports()-Methode direkt nach der Codezeile, durch die der ArrayList-Instanz der Zeichenfolgenwert "Tokyo" hinzugefügt wird, einige Zeilenumbrüche in den Code ein.

    Innerhalb dieser Zeilen können Sie jetzt zusätzlichen Code eingeben, durch den die Datenquelle für das ListBox-Steuerelement defaultParameterValuesList festgelegt wird, sobald die Seite erstmalig geladen wird.

  2. Legen Sie die DataSource-Eigenschaft des ListBox-Steuerelements defaultParameterValuesList innerhalb der Zeilen auf die GetDefaultValuesFromParameterField()-Hilfsmethode fest, und übergeben Sie die Berichtinstanz "CustomersByCity" als Methodenparameter.

``` vb
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport)
```

``` csharp
defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport);
```

So überprüfen Sie, ob das ListBox-Steuerelement defaultParameterValuesList mit Werten gefüllt wird

Sie können das Projekt jetzt erstellen und ausführen, um zu überprüfen, ob das ListBox-Steuerelement defaultParameterValuesList mit Werten gefüllt wird.

  1. Klicken Sie im Menü Erstellen auf Projektmappe erstellen.

  2. Sollten Buildfehler vorhanden sein, beheben Sie diese jetzt bitte.

  3. Klicken Sie im Menü Debuggen auf Debuggen starten.

Das ListBox-Steuerelement defaultParameterValuesList enthält eine vollständige Liste von Standardwerten (in diesem Lernprogramm Orte).
  1. Kehren Sie zu Visual Studio zurück, und klicken Sie auf Debuggen beenden, um den Debugmodus zu verlassen.

Im nächsten Abschnitt fügen Sie eine Schaltfläche hinzu, um den Bericht auf der Grundlage der Auswahlen im ListBox-Steuerelement defaultParameterValuesList erneut anzeigen zu lassen.