根据 ListBox 选择项设置参数

在本节中,将添加一个按钮,根据 defaultParameterValuesListListBox 控件中的选择项重新显示报表。在此按钮的事件方法中,将调用首次加载页面时调用的方法:SetCurrentValuesForParameterField()。但这次传递的不是任意值(Paris 和 Tokyo),而是传递 defaultParameterValuesListListBox 控件中的选定值。

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

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

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

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

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

  1. 双击“重新显示报表”按钮。
将会看到代码隐藏类,其中自动生成了 redisplay\_Click() 事件方法。
  1. 如果还没有声明 System.Web.UI.WebControls 命名空间,则在类签名之上,向类顶部为该命名空间添加 "Imports" [Visual Basic] 或 "using" [C#] 声明。
``` vb
Imports System.Web.UI.WebControls
```

``` csharp
using System.Web.UI.WebControls;
```
  1. 在刚刚自动生成的 redisplay_Click() 事件方法中,声明并实例化 ArrayList。

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  2. 创建一个 foreach 循环,从 defaultParameterValuesList ListBox 的 Items 属性中获取各个 ListItem 实例。

    For Each item As ListItem In defaultParameterValuesList.Items
    
    Next
    
    foreach(ListItem item in defaultParameterValuesList.Items)
    {
    }
    
  3. 在 foreach 循环中,创建一个嵌套条件块,检查当前 Item 实例的 Selected 属性是否设置为 True。

    If item.Selected Then
    
    End If
    
    if(item.Selected)
    {
    }
    
  4. 在条件块中,将 Item 实例的 Value 属性添加到 ArrayList 实例中。

    myArrayList.Add(item.Value)
    
    arrayList.Add(item.Value);
    
  5. 在条件块之外以及 foreach 循环之外,将 CustomersByCity 报表的文件目录路径重新绑定到 CrystalReportViewer 类的 ReportSource 属性。

    Note注意

    下面显示的文件目录路径是用于 Visual Studio 项目的。“项目名称”要替换为您的网站的名称。“用户名”要替换为您的登录名。

    网站项目的默认路径:

    myCrystalReportViewer.ReportSource = "C:\WebSites\项目名称\CustomersByCity.rpt"
    
    crystalReportViewer.ReportSource = "C:\\WebSites\\项目名称\\CustomersByCity.rpt";
    
  6. 从 CrystalReportViewer 控件的 ParameterFieldInfo 属性中获取 ParameterFields 实例。

    Dim myParameterFields As ParameterFields =
    myCrystalReportViewer.ParameterFieldInfo
    
    ParameterFields parameterFields =
    crystalReportViewer.ParameterFieldInfo;
    
  7. 将 ParameterFields 和 ArrayList 实例传入 SetCurrentValuesForParameterField() 方法。

    SetCurrentValuesForParameterField(myParameterFields, myArrayList)
    
    SetCurrentValuesForParameterField(parameterFields, arrayList);
    

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

  1. 双击重新显示 Button 控件。
将会看到代码隐藏类,其中自动生成了 redisplay\_Click() 事件方法。
  1. 在刚刚自动生成的 redisplay_Click() 事件方法中,声明并实例化 ArrayList。

    Dim myArrayList As ArrayList = New ArrayList()
    
    ArrayList arrayList = new ArrayList();
    
  2. 创建一个 foreach 循环,从 defaultParameterValuesList ListBox 的 SelectedItems 属性获取每一项(作为字符串)。

    For Each item As String In defaultParameterValuesList.SelectedItems
    
    Next
    
    foreach(string item in defaultParameterValuesList.SelectedItems)
    {
    }
    
  3. 在 foreach 循环中,将项字符串实例添加到 ArrayList 实例。

    myArrayList.Add(item)
    
    arrayList.Add(item);
    
  4. 在 foreach 循环之外,将 CustomersByCity 报表的文件目录路径重新绑定到 CrystalReportViewer 类的 ReportSource 属性。

<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>下面显示的文件目录路径是用于 Visual Studio 项目的。“项目名称”要替换为您的 Windows 项目的名称。“用户名”要替换为您的登录名。</p></td>
</tr>
</tbody>
</table>

Windows 项目的默认路径:

``` vb
myCrystalReportViewer.ReportSource = "C:\Documents and Settings\用户名\My Documents\Visual Studio\Projects\项目名称\CustomersByCity.rpt"
```

``` csharp
crystalReportViewer.ReportSource = "C:\\Documents and Settings\\用户名\\My Documents\\Visual Studio\\Projects\\项目名称\\CustomersByCity.rpt";
```
  1. 从 CrystalReportViewer 控件的 ParameterFieldInfo 属性中获取 ParameterFields 实例。

    Dim myParameterFields As ParameterFields =
    myCrystalReportViewer.ParameterFieldInfo
    
    ParameterFields parameterFields =
    crystalReportViewer.ParameterFieldInfo;
    
  2. 将 ParameterFields 和 ArrayList 实例传入 SetCurrentValuesForParameterField() 方法。

``` vb
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
```

``` csharp
SetCurrentValuesForParameterField(parameterFields, arrayList);
```

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

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

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

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

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

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

  4. 在 ListBox 控件中,按住 CTRL 键的同时单击选择列表中的不同城市。

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

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