LINQ クエリのデータでグリッド コントロールを設定する

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

このチュートリアルでは、シンプルな LINQ to SharePoint クエリを使用して、選択したデータ フィールドを 2 つの異なるリストから取得する方法について説明します。データは、グリッド コントロールによって Web パーツで提供されます。LINQ to SharePoint によるクエリの概要については、「[方法] LINQ to SharePoint を使用してクエリを実行する」を参照してください。

前提条件

  • SPMetal ツールへのパスが %PATH% 環境変数に含まれていることを確認します。詳細については、「[方法] ツールの場所を PATH 環境変数に追加する」を参照してください。

  • Contoso という名前の Microsoft SharePoint Foundation Web サイトを作成します。以降、このチュートリアル (コード、マークアップを含む) では、この名前が使用されることを前提とします。

  • Web サイトに、EmployeesProjects という 2 つのリストを作成します。各リストには、既定の [タイトル] 列が自動的に作成されます。以下の表で示すように、この 2 つのリストに列を追加します。

    Employees リスト:

    列の名前

    列の種類

    解説

    役職

    1 行テキスト

    チーム

    1 行テキスト

    プロジェクト

    ルックアップ

    Projects リストの [タイトル] 列をルックアップします。

    Projects リスト:

    列の名前

    列の種類

    解説

    説明

    1 行テキスト

    期限日

    日付と時刻

    連絡窓口

    ルックアップ

    Employees リストの [タイトル] 列をルックアップします。

  • 両方のリストにサンプルのリスト アイテムをいくつか設定します。Employees リストの [タイトル] フィールドには従業員の名前を、Projects リストの [タイトル] フィールドにはプロジェクトの名前を設定します。プロジェクトによっては、現時点から起算して、向こう 6 か月以内の日付に期限日を設定する必要がある場合があります。また、6 か月が経過した後の日付を設定しなければならないこともあります。

プロジェクトをセットアップするには

  1. Microsoft Visual Studio で、[新しいプロジェクト] ダイアログ ボックスの [インストールされているテンプレート] 領域の [SharePoint | 2010] セクションで [視覚的 Web パーツ] を選択し、Web パーツ プロジェクトを起動します。プロジェクトに ProjectsWithContacts という名前を付け、[OK] をクリックします。SharePoint カスタマイズ ウィザードが開きます。

  2. Contoso サイトをデバッグ サイトとして指定し、サンドボックス ソリューションではなく、ファーム ソリューションを展開することを指定します。[完了] をクリックします。

  3. ソリューション エクスプローラーで [参照設定] ノードを右クリックし、[参照の追加] をクリックします。[参照の追加] ダイアログ ボックスの [.NET] タブで [Microsoft.SharePoint.Linq] を選択します ([コンポーネント名] バーをクリックして、コンポーネント リストをアルファベット順に並べ替えると便利な場合があります)。[OK] をクリックします。

  4. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] を選択します。

  5. [プロパティ] ダイアログ ボックスの [アプリケーション] タブで、[アセンブリ名] に「Contoso.SharePoint.WebPartPages.ProjectsByContact」、[既定の名前空間] に「Contoso.SharePoint.WebPartPages」と入力します。[対象とする Framework] は .NET Framework 3.5 のままにしておきます。

    重要重要

    [インストールされているテンプレート] の [SharePoint | 2010] セクションのテンプレートに基づいたプロジェクトの場合、既定の [対象とする Framework] は .NET Framework 3.5 です。これは変更しないでください。Visual Studio の [標準メニュー] にある [ソリューション プラットフォーム] ボックスの既定値は "Any CPU" です。これは、[プロパティ] ダイアログ ボックスの [ビルド] タブの [プラットフォーム ターゲット] ボックスの一覧で "x64" に変更できます。この選択については、「[方法] 適切なターゲット フレームワークおよび CPU を設定する」を参照してください。

  6. ツール バーの [すべてを保存] ボタンをクリックします。

  7. SPMetal ツールの使用を自動化するには、テキスト ファイルを、Prebuild.bat という名前のプロジェクトに追加します。

  8. Prebuild.bat を開きます (まだ開いていない場合)。以下の行を追加します。

    Echo Off
    SET SPLANGEXT=cs
    
    Echo Backing up previous version of generated code ... 
    IF NOT EXIST .\PreviousVersionGeneratedCode MkDir .\PreviousVersionGeneratedCode
    IF EXIST Contoso.%SPLANGEXT% xcopy /Y/V Contoso.%SPLANGEXT% .\PreviousVersionGeneratedCode
    
    Echo Generating code ...
    SPMetal /web:http://MyServer/Contoso /code:Contoso.%SPLANGEXT%
    

    必要に応じて、次のようにコードを変更します。

    • "MyServer/Contoso" を、Contoso Web サイトへの完全パスに置き換えます。

    このバッチ ファイルにより、生成された前のバージョンのコードが保存されます。必要に応じて、このコードと新しいバージョンのコードを比較して、デバッグを行うことができます。

  9. ファイルを保存します。ただし、ファイルを保存するときに、ツール バーの [保存] または [すべてを保存]、あるいは [ファイル] メニューで [保存] は使用しないでください。Visual Studio では、テキスト ファイルの既定のエンコードは、システム バッチ ファイルと互換性がありません。代わりに、[ファイル] メニューで [名前を付けて Prebuild.bat を保存] を選択し、[保存するファイル名] ダイアログ ボックスで [保存] ボタンの下矢印をクリックして、[エンコード付きで保存] を選択します。[保存オプションの詳細設定] ダイアログ ボックスで [エンコード] ドロップダウン リストで [Unicode (UTF-8 シグネチャなし) - コードページ 65001] を選択し、[OK] をクリックします。必ず "シグネチャなし" バージョンの UTF-8 を選択するようにしてください。

    ヒントヒント

    誤って間違った方法でファイルを保存してしまった場合は、そのファイルを再度開いて、小さな変更を加えてから (スペースを挿入するなど)、正しい方法でもう一度保存します。変更を加えないと、ファイルは再保存されません。

  10. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] を選択し、[ビルド イベント] タブを開きます。

  11. [ビルド前に実行するコマンド ライン] ボックス ([ビルド後] ではありません) に、以下の 2 つの行を入力します。

    cd $(ProjectDir)
    Prebuild.bat
    

    [すべて保存] をクリックします。

  12. [ビルド] メニューで [ソリューションのビルド] を選択します。これにより、バッチ ファイルと SPMetal が呼び出されます。SPMetal により Contoso.cs ファイルが Windows のプロジェクト ディレクトリに作成されます。ただし、ソリューション エクスプローラー内にではありません。そのファイルを [既存の項目] としてプロジェクトに追加します。

    Contoso.cs は、プロジェクトを再ビルドするたびに再生成されます。このチュートリアルでは、必ずしもこのファイルを再生成する必要はありませんが、SPMetal を使用するときは、再生成を行うことをお勧めします。これにより、リストへの変更、Web サイトに追加された新しいリストの追加、および Web サイトからのリストの削除が確実に Contoso.cs ファイルに反映されるからです。

コードとマークアップを作成するには

  1. ソリューション エクスプローラーで [VisualWebPart1] ノードを展開し、VisualWebPart1.webpart ファイルを開きます。

  2. Title プロパティの値を "Projects Listed by Primary Contact" に設定します。

  3. Description プロパティの値を "Projects due in next 6 months, listed by primary contact" に設定します。

  4. ツール バーの [保存] ボタンをクリックします。

  5. VisualWebPart1UserControl.ascx ファイルを開き、次のマークアップを、既存のディレクティブの下に追加します。

    <%@ Import Namespace="Microsoft.SharePoint.WebControls" %>
    
    <SharePoint:SPGridView id="spGridView" runat="server" AutoGenerateColumns="false">
      <HeaderStyle HorizontalAlign="Left" ForeColor="Navy" Font-Bold="true" />
      <Columns>
        <SharePoint:SPBoundField DataField="Title" HeaderText="Employee">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="JobTitle" HeaderText="Job Title">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="ProjectTitle" HeaderText="Project Title">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
        <SharePoint:SPBoundField DataField="DueDate" HeaderText="Due Date">
          <headerstyle HorizontalAlign="Left" />
        </SharePoint:SPBoundField>
      </Columns>
    </SharePoint:SPGridView>
    
  6. ツール バーの [保存] ボタンをクリックします。

  7. ソリューション エクスプローラーで [VisualWebPart1UserControl.ascx] ノードを展開し、VisualWebPart1UserControl.ascx.cs 分離コード ファイルを開きます。

  8. 次の using ステートメントを追加します。

    using System.Linq;
    using Microsoft.SharePoint;
    using Microsoft.SharePoint.Linq;
    
  9. Page_Load メソッドを次の内容に置き換えます。emp.Project.DueDate および emp.Project.Title 表現によって、Employees リストと Projects リスト間に暗黙的な結合が作成されていることに注意してください。また、select 句で指定されているのが、Web パーツに実際に提供されるフィールドのみであることにも注意が必要です。各プロジェクト アイテムの [説明] フィールドは、ネットワーク経由でコンテンツ データベースからフロントエンド Web サーバーに送信する必要はありません。

    protected void Page_Load(object sender, EventArgs e)
    {
        using (ContosoDataContext dc = new ContosoDataContext(SPContext.Current.Web.Url))
        {
            EntityList<EmployeesItem> Employees =
            dc.GetList<EmployeesItem>("Employees");
    
            var empQuery = from emp in Employees
                           where emp.Project.DueDate < DateTime.Now.AddMonths(6)
                           select new
                           {
                               emp.Title,
                               emp.JobTitle,
                               ProjectTitle = emp.Project.Title,
                               DueDate = emp.Project.DueDate.Value.ToShortDateString()
                            };
    
            spGridView.DataSource = empQuery;
            spGridView.DataBind();
        }
    }
    
  10. ツール バーの [保存] ボタンをクリックします。

Web パーツを展開してテストするには

  1. [ビルド] メニューで [ソリューションの展開] を選択します。展開プロセスでは、以下の処理が行われます。

    • バッチ ファイル (および SPMetal) の実行

    • プロジェクトのビルド

    • ファームのソリューション ギャラリーへの ProjectsWithContacts.wsp パッケージ ファイルの展開

    • グローバル アセンブリ キャッシュへの Contoso.SharePoint.WebPartPages.ProjectsByContact.dll アセンブリの展開

    • サイト コレクションのフィーチャー ギャラリーへの [ProjectsWithContacts Feature1] 機能の追加

    • 機能のアクティブ化

    • インターネット インフォメーション サービス (IIS) のリサイクル

    プロジェクトを変更してから [ソリューションの展開] を選択すると、前のバージョンのソリューションが自動的に取り消され、最新のバージョンに置き換えられます。

  2. Web サイトの任意の Web パーツ ページに移動し、リボンの [ページ] タブをクリックします。

  3. [ページの編集] をクリックし、任意の Web パーツ ゾーンで [Web パーツの追加] をクリックします。

  4. [カテゴリ] ボックスで [カスタム] フォルダーをクリックし、[Web パーツ] ボックスで [Projects Listed by Primary Contact] をクリックして、[追加] をクリックします。

  5. [編集の終了] をクリックします。Web パーツがページに表示されること、および 2 つのリストのデータが Web パーツに設定されていることを確認します。現時点から 6 か月が経過した後の日付に期限日が設定されているプロジェクトは表示されないはずです。

関連項目

タスク

[方法] SPMetal を使用する

概念

[方法] LINQ to SharePoint を使用してクエリを実行する

[方法] ツールの場所を PATH 環境変数に追加する

その他の技術情報

LINQ to SharePoint でデータを管理する