DataGrid for WPF/Silverlight
手順 2:Web サービスの追加
製品の概要 > チュートリアル (Silverlight のみ) > Web サービスへのグリッドの連結 > 手順 2:Web サービスの追加

この手順では、データベースをプロジェクトに追加し、グリッドを連結するプロセスを開始します。この手順では、標準の Northwind データベースとサンプルコードファイルを使用します。これらは、ComponentOne for Silverlight のサンプルにインストールされています。

プロジェクトを設定するには、次の手順に従います。

  1. ソリューションエクスプローラで、.Web プロジェクト(たとえば、ComponentOneDataGrid.Web)を展開します。App_Data フォルダが表示されていない場合、.Web プロジェクトを右クリックして、[追加][新しいフォルダ]を選択して、フォルダ名を「App_Data」に設定します。
  2. ソリューションエクスプローラで、App_Data ノードを右クリックして、[追加][既存の項目]を選択します。
  3. [既存のアイテムの追加]ダイアログボックスで、C:\Users\<ユーザー名>\Documents\ComponentOne Samples\Common ディレクトリに移動します。Nwind.mdb ファイルを選択し、[追加]をクリックしてプロジェクトに追加します。
  4. ソリューションエクスプローラで、今追加した Nwind.mdb ファイルを選択し、プロパティウィンドウで、[ビルドアクション]プロパティを[なし]に設定します。
  5. ソリューションエクスプローラで、.Web プロジェクト(たとえば、ComponentOneDataGrid.Web)を右クリックし、[追加][既存の項目]を選択します。
  6. [既存のアイテムの追加]ダイアログボックスで、製品サンプルの C1_MDSL\C1_MDSLWeb ディレクトリに移動します。SmartDataSet.cs ファイルを選択し、[追加]をクリックしてプロジェクトに追加します。
    このファイルには、データベースと双方向のデータ転送を行うためのコードが含まれています。
  7. ソリューションエクスプローラで、.Web プロジェクトを右クリックし、[追加][新しい項目]を選択します。
  8. [新しい項目の追加]ダイアログボックスの左ペインで、[Web]項目を選択します。
  9. テンプレートリストで、[Web サービス]を選択します。その Web サービスの名前を「DataService.asmx」とし、[追加]ボタンをクリックします。Web サービスファイルがプロジェクトに追加され、自動的に開かれます。
  10. DataService.asmx ファイルで、ファイルの先頭に次の using 文を追加します。
    コードのコピー
    Imports System.IO
    
    Imports System.Data
    
    Imports C1_MDSLWeb ' SmartDataSet 名前空間
    
    コードのコピー
    using System.IO;
    
    using System.Data;
    
    using C1_MDSLWeb; // SmartDataSet 名前空間
    
  11. 次に、[System.Web.Script.Services.ScriptService] または <System.Web.Script.Services.ScriptService()> 行のコメントを外します。
    これによりスクリプトからの Web サービス呼び出しが有効になります。
  12. 既存の HelloWorld メソッドを削除し、次のコードに置き換えます。
    コードのコピー
    <WebMethod> _
    
    Public Function GetData(tables As String) As Byte()
    
        ' 接続文字列を含む DataSet を作成します。
    
        Dim ds = GetDataSet()
    
        ' DataSet にデータを読み込みます
    
        ds.Fill(tables.Split(","C))
    
        ' ストリームに接続します
    
        Dim ms = New System.IO.MemoryStream()
    
        ds.WriteXml(ms, XmlWriteMode.WriteSchema)
    
        ' ストリームデータを返却します
    
        Return ms.ToArray()
    
    End Function
    
    Private Function GetDataSet() As SmartDataSet
    
        ' mdb ファイルの物理的な場所を取得します
    
        Dim mdb As String = Path.Combine(Context.Request.PhysicalApplicationPath, "App_Data\nwind.mdb")
    
        ' このファイルの存在を確認します
    
        If Not File.Exists(mdb) Then
    
            Dim msg As String = String.Format("Cannot find database file {0}.", mdb)
    
            Throw New FileNotFoundException(msg)
    
        End If
    
        ' ファイルが読み取り専用でないことを確認します(ソースコントロールによって読み取り専用にされる場合があります)
    
        Dim att As FileAttributes = File.GetAttributes(mdb)
    
        If (att And FileAttributes.[ReadOnly]) <> 0 Then
    
            att = att And Not FileAttributes.[ReadOnly]
    
            File.SetAttributes(mdb, att)
    
        End If
    
        ' SmartDataSet を作成および初期化します
    
        Dim dataSet = New SmartDataSet()
    
        dataSet.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & mdb
    
        Return dataSet
    
    End Function
    
    コードのコピー
    [WebMethod]
    
    public byte[] GetData(string tables)
    
    {
    
        // 接続文字列を含む DataSet を作成します
    
        var ds = GetDataSet();
    
        // DataSet にデータを読み込みます
    
        ds.Fill(tables.Split(','));
    
        // ストリームに接続します
    
        var ms = new System.IO.MemoryStream();
    
        ds.WriteXml(ms, XmlWriteMode.WriteSchema);
    
        // ストリームデータを返却します
    
        return ms.ToArray();
    
    }
    
    SmartDataSet GetDataSet()
    
    {
    
        // mdb ファイルの物理的な場所を取得します
    
        string mdb = Path.Combine(
    
        Context.Request.PhysicalApplicationPath, @"App_Data\nwind.mdb");
    
        // このファイルの存在を確認します
    
        if (!File.Exists(mdb))
    
        {
    
            string msg = string.Format("Cannot find database file {0}.", mdb);
    
            throw new FileNotFoundException(msg);
    
        }
    
        // ファイルが読み取り専用でないことを確認します(ソースコントロールによって読み取り専用にされる場合があります)
    
        FileAttributes att = File.GetAttributes(mdb);
    
        if ((att & FileAttributes.ReadOnly) != 0)
    
        {
    
            att &= ~FileAttributes.ReadOnly;
    
            File.SetAttributes(mdb, att);
    
        }
    
        // SmartDataSet を作成および初期化します
    
        var dataSet = new SmartDataSet();
    
        dataSet.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" + mdb;
    
        return dataSet;
    
    }
    

    このコードは、データセットを作成し、データベースからデータを受け取ります。

  13. .Web プロジェクト(たとえば、ComponentOneDataGrid.Web)を右クリックし、コンテキストメニューから[ビルド]を選択します。これで、ComponentOneDataGrid.Web プロジェクトの作業は終了し、ComponentOneDataGrid プロジェクトの作業に戻ります。

ここまでの成果

この手順では、プロジェクトにデータベースを追加し、Web サービスを作成しました。次の手順では、最後にプロジェクトに Web サービスを接続し、アプリケーションを実行します。