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

前の手順では、Web サービスを作成し、プロジェクトにデータベースを追加しました。この手順では、引き続き、Web サービスをアプリケーションにリンクします。この手順では Data for Silverlight が必要です。

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

  1. ソリューションエクスプローラでプロジェクトノードを展開し、プロジェクト名(たとえば、ComponentOneDataGrid)を右クリックし、コンテキストメニューから[参照の追加]を選択します。
  2. [参照の追加]ダイアログボックスで、C1.Silverlight.Data アセンブリへの参照を追加し、[OK]をクリックします。
  3. ソリューションエクスプローラで、プロジェクト名を右クリックし、コンテキストメニューから[サービス参照の追加]を選択します。
  4. [サービス参照の追加]ダイアログボックスで、[検出]ボタンをクリックします。サービスのリストに DataService.asmx ファイルが表示されます。
  5. [名前空間]テキストボックスで、デフォルト値を「DataService」に変更します。[OK]ボタンをクリックして設定を保存し、ダイアログボックスを閉じます。
  6. ソリューションエクスプローラで、MainPage.xaml ノードを展開し、MainPage.xaml.cs または MainPage.xaml.vb ファイルをダブルクリックしてコードエディタで開きます。
  7. 次の using 文または Imports 文をファイルの先頭に追加します。
    コードのコピー
    Imports System.IO
    Imports C1.Silverlight.Data
    Imports ComponentOneDataGrid.DataService ' ComponentOneDataGrid はプロジェクトの名前空間です。プロジェクト名に合わせて変更してください。
    
    コードのコピー
    using System.IO;
    using C1.Silverlight.Data;
    using ComponentOneDataGrid.DataService; // ComponentOneDataGrid はプロジェクトの名前空間です。プロジェクト名に合わせて変更してください。
    
  8. MainPage コンストラクタに LoadData(); を追加します。次のようになります。
    コードのコピー
    Public Sub New()
        InitializeComponent()
        LoadData()
    End Sub
    
    コードのコピー
    public MainPage()
    {
        InitializeComponent();
        LoadData();
    }
    
  9. Web サービスからデータを取得するために、LoadData メソッドと svc_GetDataCompleted メソッドを追加します。
    コードのコピー
    Private _ds As DataSet = Nothing
    Private Sub LoadData()
        ' Web サービスを呼び出します
        Dim svc = GetDataService()
        AddHandler svc.GetDataCompleted, AddressOf svc_GetDataCompleted
        'svc.GetDataAsync("Categories,Products,Employees"); 
        svc.GetDataAsync("Employees")
    End Sub
    Private Sub svc_GetDataCompleted(sender As Object, e As GetDataCompletedEventArgs)
        ' エラーを処理します
        If e.[Error] IsNot Nothing Then
            _tbStatus.Text = "データダウンロード中にエラーが発生しました..."
            Return
        End If
        ' サーバーからのデータストリームを解析します(DataSet は XML)
        _tbStatus.Text = String.Format("データは, {0:n0} kBytes", e.Result.Length / 1024)
        Dim ms = New MemoryStream(e.Result)
        _ds = New DataSet()
        _ds.ReadXml(ms)
        ' コントロールをデータに連結します
        BindData()
    End Sub
    
    コードのコピー
    DataSet _ds = null;
    void LoadData()
    {
        // Web サービスを呼び出します
        var svc = GetDataService();
        svc.GetDataCompleted += svc_GetDataCompleted;
        //svc.GetDataAsync("Categories,Products,Employees");
        svc.GetDataAsync("Employees");
    }
    void svc_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
    {
        // エラーを処理します
        if (e.Error != null)
        {
            _tbStatus.Text = "データダウンロード中にエラーが発生しました...";
            return;
        }
        // サーバーからのデータストリームを解析します(DataSet は XML)
        _tbStatus.Text = string.Format("データは, {0:n0} kBytes", e.Result.Length / 1024);
        var ms = new MemoryStream(e.Result);
        _ds = new DataSet();
        _ds.ReadXml(ms);
        // コントロールをデータに連結します
        BindData();
    }
    
  10. GetDataService() メソッドを実装します。それには、次のコードを追加します。
    コードのコピー
    ' 現在のホスト/ドメインに関連するデータサービスを取得します
    Private Function GetDataService() As DataServiceSoapClient
        ' バッファサイズを増やします
        Dim binding = New System.ServiceModel.BasicHttpBinding()
        binding.MaxReceivedMessageSize = 2147483647
        ' int.MaxValue
        binding.MaxBufferSize = 2147483647
        ' サービスの絶対アドレスを取得します
        Dim uri As Uri = C1.Silverlight.Extensions.GetAbsoluteUri("DataService.asmx")
        Dim address = New System.ServiceModel.EndpointAddress(uri)
        ' 新しいサービスクライアントを返します
        Return New DataServiceSoapClient(binding, address)
    End Function
    
    コードのコピー
    // 現在のホスト/ドメインに関連するデータサービスを取得します
    DataServiceSoapClient GetDataService()
    {
        // バッファサイズを増やします
        var binding = new System.ServiceModel.BasicHttpBinding();
        binding.MaxReceivedMessageSize = 2147483647;
        // int.MaxValue
        binding.MaxBufferSize = 2147483647;
        // サービスの絶対アドレスを取得します
        Uri uri = C1.Silverlight.Extensions.GetAbsoluteUri("DataService.asmx");
        var address = new System.ServiceModel.EndpointAddress(uri);
        // 新しいサービスクライアントを返します
        return new DataServiceSoapClient(binding, address);
    }
    
  11. BindData() メソッドを実装します。それには、次のコードを追加します。
    コードのコピー
    Private Sub BindData()
        ' テーブルを取得します
        Dim dtEmployees As DataTable = _ds.Tables("Employees")
        ' カテゴリグリッドにデータを挿入します
        _c1DataGrid.ItemsSource = dtEmployees.DefaultView
    End Sub
    
    コードのコピー
    void BindData()
    {
        // テーブルを取得します
        DataTable dtEmployees = _ds.Tables["Employees"];
        // カテゴリグリッドにデータを挿入します
        _c1DataGrid.ItemsSource = dtEmployees.DefaultView;
    }
    
  12. アプリケーションを実行し、グリッドが Northwind データベースの Employees テーブルに連結していることを確認します。

ここまでの成果

おめでとうございます。このチュートリアルは終了です。このチュートリアルでは、新しい Silverlight プロジェクトを作成し、Access データベースを追加し、Web サービスを作成して、C1DataGrid コントロールを連結しました。