次の方法で共有


Web サイトの DropDownList コントロールの値の設定

ここでは、埋め込みでないレポートのリストを DropDownList コントロールに設定するコードを記述します。getReports() ヘルパー メソッドを使用して、Crystal Reports Web サービスからレポートのリストを生成し、次にそのリストを DropDownList コントロールにバインドします。

Windows プロジェクトの場合は、「Windows プロジェクトの ComboBox コントロールの値の設定」を参照してください。

Web サイトで DropDownList コントロールに値を入力する

  1. Web フォームを開きます。

  2. [表示]メニューの[コード]をクリックします。

  3. System.IO 名前空間と System.Collections 名前空間のために、"Imports"[Visual Basic] または "using"[C#] 宣言をクラスの先頭(クラス署名の上)に追加します。

``` vb
Imports System.IO
Imports System.Collections
```

``` csharp
using System.IO;
using System.Collections;
```
  1. page_load() イベント ハンドラの内部に、Not IsPostBack 条件ブロックを作成します。

    Note

    Not IsPostBack 条件ブロックは、ページが初めてロードされるときにのみ実行するコードのカプセル化に使用されます。通常、コントロールは Not IsPostBack 条件ブロック内でデータ値にバインドされるため、ページの再ロード中にはこれらのデータ値(および後続のあらゆるコントロール イベント)はリセットされません。

    If Not IsPostBack Then
    Else
    End If
    
    if(!IsPostBack)
    {
    }
    else
    {
    }
    
  2. If ブロックの内部で、getReports() ヘルパー メソッドを使用して Web サービスからレポートの一覧を取得します。その結果を ArrayList に割り当てます。

    Dim myReports As ArrayList = getReports()
    
    ArrayList reports = getReports();
    
  3. 次の行で、SortedList クラスをインスタンス化して、それをその親インターフェイスの IDictionary に渡します。

``` vb
Dim mySortedList As IDictionary = New SortedList
```

``` csharp
IDictionary sortedList = new SortedList();
```
  1. 次に、reports の各要素によってループする For Each ループを作成します。
``` vb
For Each myPath As String In myReports
Next
```

``` csharp
foreach (string path in reports)
{
}
```
  1. 次のブロックでは、文字列操作メソッドを使用して各レポートの名前からファイル パスを削除し、文字列リテラルを伴うエスケープ文字で置換します。これらの行を For Each ループの内部に挿入します。
``` vb
Dim myReportNamePrefix As Integer = myPath.LastIndexOf("/") + 1
Dim myReportNameSufix As Integer = myPath.LastIndexOf("?")
Dim myReportNameLength As Integer = myReportNameSufix - myReportNamePrefix
Dim myReportName As String = myPath.Substring(myReportNamePrefix, myReportNameLength)
reportName = reportName.Replace("%20", " ")
```

``` csharp
int reportNamePrefix = path.LastIndexOf(@"/") + 1;
int reportNameSufix = path.LastIndexOf(@"?");
int reportNameLength = reportNameSufix - reportNamePrefix;
string reportName = path.Substring(reportNamePrefix, reportNameLength);
myReportName = myReportName.Replace("%20", " ");
```
  1. さらに For Each ループの内部で、sortedList IDictionary に切り詰められたレポート名を追加するコードを 1 行追加します。
``` vb
mySortedList.Add(myPath, myReportName)
```

``` csharp
sortedList.Add(path, reportName);
```

並べ替えられたリストの DropDownList コントロールへのバインド

ここでは、IDictionary データ ソースを DropDownList コントロールにバインドする方法を学習します。最初に、IDictionary コレクションのエレメントと DropDownList フィールドの関係を定義します。次に、IDictionary データ ソースを DropDownList コントロールにバインドします。

  1. For Each ループの外部で、DropDownList の Value フィールドを sortedList インスタンス の key プロパティに割り当てるコードを追加します。

    reportsList.DataTextField = "value"
    
    reportsList.DataTextField = "value";
    
  2. 次に、DropDownList コントロールの Value フィールドを sortedList インスタンス の key プロパティに割り当てます。

``` vb
reportsList.DataValueField = "key"
```

``` csharp
reportsList.DataValueField = "key";
```
  1. SortedList インスタンスを DropDownList コントロールの dataSource プロパティに割り当てます。

    reportsList.DataSource = mysortedList
    
    reportsList.DataSource = sortedList;
    
  2. 最後に、データ ソースを DropDownList にバインドします。

``` vb
reportsList.DataBind()
```

``` csharp
reportsList.DataBind();
```

これで、If Not IsPostBack 条件ブロックの内容作成が終了しました。次のセクションでは、Else 条件ブロック内部で、ServerFileReport インスタンスに新しい値を割り当てずにページが最新表示されたときの動作を定義するコードを記述します。
  1. else 文の内部で、現在のセッションで保留されているレポートに ServerFileReport インスタンスを割り当てます。
Session は一般的なオブジェクトだけを返すため、レポートを目的のレポート タイプにキャストする必要があります。埋め込みレポートと埋め込みでないレポートのどちらを使用している場合でも、取得したオブジェクトを ServerFileReport タイプにキャストします。

``` vb
myServerFileReport = CType(Session("myServerFileReport"),
ServerFileReport)
```

``` csharp
serverFileReport = (ServerFileReport)Session["serverFileReport"];
```
  1. 次の行では、ServerFileReport インスタンスを CrystalReportViewer コントロールにバインドします。

    myCrystalReportViewer.ReportSource = myServerFileReport
    
    crystalReportViewer.ReportSource = serverFileReport;
    
  2. [ファイル]メニューの[すべて保存]をクリックします。

  3. [ビルド]メニューで[ソリューションのビルド]を選択します。

  4. ビルド エラーが発生した場合は、ここで修正します。

次のセクションでは、reportsList DropDownList コントロールでの選択に基づいてレポートをバインドするクリック イベントを追加します。

「レポートをバインドするクリック イベントの追加」に進みます。