Angular Grid 選択

    選択機能により、Grid ベースのマテリアル UI で豊富なデータ選択機能が有効になります。強力な API と使いやすいメソッドのおかげで、さまざまなイベントと単一の選択アクションを利用できます。Grid は、セル選択の 3 つのモードをサポートしています。cellSelection プロパティを変更することで、それらを簡単に切り替えることができます。セルの選択を無効にするか、グリッド内の 1 つのセルのみを選択するか、グリッド内の複数のセルを選択することができます。これはデフォルトのオプションとして提供されています。 これらの各オプションについて詳しく説明します。

    Angular セル選択の例

    以下のサンプルは、Grid のセル選択動作の 3 つのタイプを示します。以下のボタンを使用して、使用可能な各選択モードを有効にします。Snackbar メッセージ ボックスで各ボタンの操作について簡単に説明します。

    選択タイプ

    Grid 複数セル選択

    セルの選択方法:

    • マウス ドラッグ - セルの長方形データ選択。
    • Ctrl キー 押下 + マウス ドラッグ - 複数の範囲が選択されます。その他の既存のセル選択は保持されます。
    • Shift キーを使用して複数セルの選択をインスタンス化します。Shift キーを押しながら、単一セルを選択して別の単一セルを選択します。2 つのセル間のセル範囲が選択されます。Shift キーを押しながら他の 2 番目のセルを選択すると、最初に選択したセルの位置 (開始点) に基づいてセル選択範囲が更新されます。
    • Shift キーを押しながら矢印キーを使用してキーボードで複数セルを選択します。マルチセル選択範囲は、フォーカスされたセルに基づいて作成されます。
    • Shift キーを押しながら Ctrl + Arrow キーCtrl + Home/End を使用してキーボードで複数セルを選択します。マルチセル選択範囲は、フォーカスされたセルに基づいて作成されます。
    • Ctrl キーを押しながら左マウスキーでクリックすると、選択したセルコレクションに単一のセル範囲が追加されます。
    • マウスでクリックしてドラッグすることで、連続した複数セルの選択が可能です。

    デモ

    Grid 単一選択

    [cellSelection]="'single'" を設定すると、一度にグリッド内で選択されたセルを1つだけ持つことができます。また、モードマウスドラッグは機能せず、セルを選択する代わりに、デフォルトのテキスト選択が行われます。

    選択モードsingle であるか multiple であるかに関係なく、単一セルが selected イベントが発生したときに発生します。複数セル選択モードでは、セル範囲を選択すると rangeSelected イベントが発生します。

    Grid 選択なし

    セルの選択を無効にする場合は、[cellSelection]="'none'" プロパティを設定するだけです。このモードでは、セルをクリックするかキーボードでナビゲートしようとすると、セルは選択されずアクティブ化のスタイルのみが適用され、ページ上の他の要素をスクロールまたはクリックすると失われます。選択を定義する唯一の方法は、以下で説明する API メソッドを使用することです。

    キーボード ナビゲーションのインタラクション

    Shift キーが押されている間

    • Shift + 上矢印 - 現在の選択範囲に上のセルを追加します。
    • Shift + 下矢印 - 現在の選択範囲に下のセルを追加します。
    • Shift + 左矢印 - 現在の選択に左のセルを追加します。
    • Shift + 右矢印 - 現在の選択範囲に右のセルを追加します。

    Ctrl + Shift キーが押されている間

    • Ctrl + Shift + 上矢印 - 列内のフォーカスのあるセルの上にあるすべてのセルを選択します。
    • Ctrl + Shift + 下矢印 - 列内のフォーカスのあるセルの下にあるすべてのセルを選択します。
    • Ctrl + Shift + 左矢印 - 行の先頭まですべてのセルを選択します。
    • Ctrl + Shift + 右矢印 - 行末まですべてのセルを選択します。
    • Ctrl + Shift + Home - フォーカスされているセルからグリッド内の最初のセルまでのすべてのセルを選択します。
    • Ctrl + Shift + End - フォーカスされているセルからグリッド内の最後のセルまでのすべてのセルを選択します。
    Note

    連続スクロールは、グリッド本体でのみ可能です。

    API の使用

    以下は、範囲の選択、選択の解除、または選択したセル データを取得する方法です。

    範囲の選択

    selectRange(range) - API を使用してセル範囲を選択します。rowStartrowEnd は行インデックスを使用する必要があり、columnStartcolumnEnd は列インデックスまたは列データフィールド値を使用できます。

    const range = { rowStart: 2, rowEnd: 2, columnStart: 1, columnEnd: 1 };
    this.grid1.selectRange(range);
    ...
    
    const range = { rowStart: 0, rowEnd: 2, columnStart: 'Name', columnEnd: 'ParentID' };
    this.grid1.selectRange(range);
    
    Note

    選択範囲は加算操作です。以前の選択はクリアされません。

    セル選択のクリア

    clearCellSelection() は、現在のセル選択をクリアします。

    選択したデータの取得

    getSelectedData() は、選択内容に応じた形式で選択されたデータの配列を返します。

    1. 3 つの異なる単一セルが選択されている場合:

      expectedData = [
       { CompanyName: 'Infragistics' },
       { Name: 'Michael Langdon' },
       { ParentID: 147 }
      ];
      
    2. 1 列から 3 つのセルが選択されている場合:

      expectedData = [
       { Address: 'Obere Str. 57'},
       { Address: 'Avda. de la Constitución 2222'},
       { Address: 'Mataderos 2312'}
      ];
      
    3. 1 行 3 列から 3 つのセルをマウスドラッグで選択した場合:

      expectedData = [
       { Address: 'Avda. de la Constitución 2222', City: 'México D.F.', ContactTitle: 'Owner' }
      ];
      
    4. 2 行 3 列から 3 つのセルをマウスドラッグで選択した場合:

      expectedData = [
       { ContactTitle: 'Sales Agent', Address: 'Cerrito 333', City: 'Buenos Aires'},
       { ContactTitle: 'Marketing Manager', Address: 'Sierras de Granada 9993', City: 'México D.F.'}
      ];
      
    5. 2 つの異なる範囲が選択されている場合:

      expectedData = [
       { ContactName: 'Martín Sommer', ContactTitle: 'Owner'},
       { ContactName: 'Laurence Lebihan', ContactTitle: 'Owner'},
       { Address: '23 Tsawassen Blvd.', City: 'Tsawassen'},
       { Address: 'Fauntleroy Circus', City: 'London'}
      ];
      
    6. 2 つの重複範囲が選択されている場合、形式は次のようになります。

      expectedData = [
       { ContactName: 'Diego Roel', ContactTitle: 'Accounting Manager', Address: 'C/ Moralzarzal, 86'},
       { ContactName: 'Martine Rancé', ContactTitle: 'Assistant Sales Agent', Address: '184, chaussée de Tournai', City: 'Lille'},
       { ContactName: 'Maria Larsson', ContactTitle: 'Owner', Address: 'Åkergatan 24', City: 'Bräcke'},
       { ContactTitle: 'Marketing Manager', Address: 'Berliner Platz 43', City: 'München'}
      ];
      
    Note

    selectedCells() は、セルがグリッド ビュー ポートに表示されていない場合でも、正しい結果を返します。getSelectedData() も、選択したセル データを返します。 getSelectedRanges(): GridSelectionRange[] は、キーボードとポインターの両方の操作からグリッドで現在選択されている範囲を返します。

    機能の統合

    マルチセル選択はインデックス ベースです (DOM 要素選択)。

    • ソート - ソートが実行されると、選択は解除されません。昇順または降順でソートしている間、現在選択されているセルはそのままになります。
    • ページング - ページング時に選択されたセルはクリアされます。選択はページを超えては持続されません。選択はページを超えては持続されません。
    • フィルタリング - フィルタリングが実行されると、選択は解除されません。フィルタリングがクリアされている場合は、最初に選択されたセルが返されます。
    • サイズ変更 - 列のサイズを変更すると、選択したセルはクリアされません。
    • 非表示 - 選択したセルはクリアされません。列が非表示の場合は、次に表示されている列のセルが選択されます。
    • ピン固定 - 選択したセルはクリアされません。非表示と同じです。
    • グループ化 - 列をグループ化すると、選択したセルはクリアされません。

    スタイリングのガイドライン

    テーマ エンジンは、選択したセルの範囲をスタイルできるプロパティを公開します。

    テーマのインポート

    選択のスタイル設定を始めるには、すべてのテーマ関数とコンポーネントミックスインが存在する index ファイルをインポートする必要があります。

    @use "igniteui-angular/theming" as *;
    
    // 重要: Ignite UI for Angular 13 より前のバージョンは、次を使用してください。
    // @import '~igniteui-angular/lib/core/styles/themes/index';
    

    色の定義

    完了後、igx-contrast-colorigx-color 関数を使用できます。これらの関数を使用して、選択範囲に使用する色を定義します。

        $text-color:contrast-color($default-palette, 'primary', 900);
        $background-color: color($default-palette, "primary", 900);
        $border-yellow: #f2c43c;
    

    カスタム テーマの作成

    次に、text-colorbackground-colorborder-yellow 変数をそれぞれ $cell-selected-text-color$cell-selected-background$cell-active-border-color として渡して、grid-theme を拡張する新しいテーマを作成します。

    $custom-grid-theme: grid-theme(
        $cell-selected-text-color: $text-color,
        $cell-active-border-color: $border-yellow,
        $cell-selected-background: $background-color
    );
    

    テーマの適用

    次にコンポーネントのスタイルにミックスインを含め (アプリ スタイルにすることも可能)、igx-grid がデフォルトのテーマの代わりに新しく作成されたテーマを使用するようになります。

        @include grid($custom-grid-theme);
    
    Note

    コンポーネントが Emulated ViewEncapsulation を使用している場合、::ng-deep を使用してこのカプセル化に侵入する必要があります。 アプリケーション内に存在する可能性のある他のグリッドに影響を与えないように、スタイルを :host セレクターの下で範囲指定します。

       :host {
           ::ng-deep {
               @include grid($custom-grid-theme);
           }
       }
    

    カスタム テーマを適用すると、選択したグリッドセルが選択した色で強調表示されます。

    デモ

    Note

    このサンプルは、「テーマの変更」から選択したグローバル テーマに影響を受けません。

    API リファレンス

    その他のリソース

    コミュニティに参加して新しいアイデアをご提案ください。