根据 ListBox 选择项设置参数

在本节中,需要添加一个按钮,根据 defaultParameterValuesList ListBox 控件中的选择项重新显示报表。

在此按钮的事件方法中,将调用首次加载页面时调用的方法:SetCurrentValuesForParameterField()。但这次传递的不是设定值(“Paris”和“Tokyo”),而是 defaultParameterValuesList ListBox 控件中的选定值。

创建和配置窗体上的重新显示按钮

  1. 打开 Web 或 Windows 窗体。
  2. 从“视图”菜单中,单击“设计器”。
  3. 从“工具箱”中,将“Button”控件拖到“ListBox”控件的右侧。
  4. 单击“Button”控件,将其选中。
  5. 在“属性”窗口中执行以下操作:
    • 将“ID”或“Name”设置为“redisplay”。
    • 将“Text”设置为“重新显示报表”。

现在即可创建按钮单击事件方法,该方法将检查 ListBox 控件中的选定项并将其传递给 SetCurrentValuesForParameterField() 方法。

用于 Web 项目和用于 Windows 项目的代码会略有不同,因此仅完成下面的 Web 或 Windows 过程即可。

为 Web 项目中的重新显示按钮创建单击事件方法

  1. 双击重新显示 Button 控件。

    将会看到代码隐藏类,其中自动生成了 redisplay_Click() 事件方法。

  2. 如果还没有声明 System.Web.UI.WebControls 命名空间,则在类签名之上,向类顶部为该命名空间添加 "Imports" [Visual Basic] 或 "using" [C#] 声明。

``` vb
Imports System.Web.UI.WebControls
```

``` csharp
using System.Web.UI.WebControls;
```

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images/8yfdxzdx.alert_note(zh-cn,VS.90).gif" alt="Note" class="note" />注意</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>需要有此声明才能访问 ListItem 类。</p></td>
</tr>
</tbody>
</table>
  1. 在刚刚自动生成的 redisplay_Click() 事件方法中,声明并实例化 ArrayList。
``` vb
Dim myArrayList As ArrayList = New ArrayList()
```

``` csharp
ArrayList arrayList = new ArrayList();
```
  1. 创建一个 foreach 循环,从 defaultParameterValuesList 的 Items 属性中获取各个 ListItem 实例。

    For Each item As ListItem In defaultParameterValuesList.Items
    
    Next
    
    foreach(ListItem item in defaultParameterValuesList.Items)
    {
    }
    
  2. 在 foreach 循环中,创建一个嵌套条件块,在当前 Item 实例的 Selected 属性设置为 True 时将 Item 实例添加到 Arraylist 实例。

    If item.Selected Then
    myArrayList.Add(item.Value)
    End If
    
    if(item.Selected)
    {
    arrayList.Add(item.Value);
    }
    
  3. 在条件块之外以及 foreach 循环之外,调用 SetCurrentValuesForParameterField() 方法,将 CustomersByCity 报表实例和 ArrayList 实例传递给该方法。

    SetCurrentValuesForParameterField(customersByCityReport, myArrayList)
    
    SetCurrentValuesForParameterField(customersByCityReport, arrayList);
    

    现在已将 ListBox 控件的选定值应用为参数字段的当前值,可以重新显示报表了。

  4. 将 CustomersByCity 报表实例重新绑定到 CrystalReportViewer 控件的 ReportSource 属性。

    myCrystalReportViewer.ReportSource = customersByCityReport
    
    crystalReportViewer.ReportSource = customersByCityReport;
    

为 Windows 项目中的重新显示按钮创建单击事件方法

  1. 双击重新显示 Button 控件。

    将会看到代码隐藏类,其中自动生成了 redisplay_Click() 事件方法。

  2. 在刚刚自动生成的 redisplay_Click() 事件方法中,声明并实例化 ArrayList。

``` vb
Dim myArrayList As ArrayList = New ArrayList()
```

``` csharp
ArrayList arrayList = new ArrayList();
```
  1. 创建一个 foreach 循环,从 defaultParameterValuesList 的 SelectedItems 属性获取每一项(作为字符串)。

    For Each item As String In defaultParameterValuesList.SelectedItems
    
    Next
    
    foreach(string item in defaultParameterValuesList.SelectedItems)
    {
    }
    
  2. 在条件块中,将项 String 实例添加到 ArrayList 实例中。

    myArrayList.Add(item)
    
    arrayList.Add(item);
    
  3. 在条件块之外以及 foreach 循环之外,调用 SetCurrentValuesForParameterField() 方法,将 CustomersByCity 报表实例和 ArrayList 实例传递给该方法。

    SetCurrentValuesForParameterField(customersByCityReport, myArrayList)
    
    SetCurrentValuesForParameterField(customersByCityReport, arrayList);
    

    现在已将 ListBox 控件的选定值应用为参数字段的当前值,可以重新显示报表了。

  4. 将 CustomersByCity 报表实例重新绑定到 CrystalReportViewer 控件的 ReportSource 属性。

    myCrystalReportViewer.ReportSource = customersByCityReport
    
    crystalReportViewer.ReportSource = customersByCityReport;
    

验证是否已经填充 defaultParameterValuesList ListBox 控件

现在即可生成并运行项目,验证是否已经成功重置了参数字段。

  1. 从“生成”菜单中选择“生成解决方案”。

  2. 如果生成过程中出错,请立即纠正。

  3. 从“调试”菜单中,单击“开始”。

  4. 在“ListBox”控件中,按住 Ctrl 键的同时在列表中至少单击选择四个不同城市。

  5. 单击“重新显示报表”。

页面会重新加载,显示居住在刚才选定的一组城市中的客户的客户记录。
  1. 返回到 Visual Studio,然后单击“停止”从调试模式中退出。

如果是 Windows 应用程序,则现在已完成。如果是网站项目,请继续浏览“配置参数持久性”部分。