Angular Grid 列ピン固定

    単一または複数の列を Angular UI グリッドの左端にピン固定できます。Ignite UI for Angular の列固定は、ユーザーが特定の列順序で列をロックすることを可能にし、Grid で水平スクロール時にロックされた列が常に表示されます。Material UI Grid には組み込みの列ピン固定 UI があり、Grid のツールバーで列の表示状態を変更できます。その他、カスタム UI を定義し、Column Pinning API を介して列のピン固定状態を変更できます。

    Angular Grid 列ピン固定の例

    列固定 API

    列ピン固定は、igx-columnpinned 入力によって制御されます。ピン固定列は常に Grid の左側に描画され、Grid 本体のピン固定されていない列の水平スクロールで固定されます。

    <igx-grid #grid1 [data]="data | async" [width]="700px" [autoGenerate]="false" (columnInit)="initColumns($event)"
        (selected)="selectCell($event)">
        <igx-column [field]="Name" [pinned]="true"></igx-column>
        <igx-column [field]="AthleteNumber"></igx-column>
        <igx-column [field]="TrackProgress"></igx-column>
        <igx-paginator [perPage]="10">
        </igx-paginator>
    </igx-grid>
    

    IgxGridComponent の Grid の pinColumn または unpinColumn メソッドを使用してフィールド名によって列をピン固定またはピン固定解除できます。

    this.grid.pinColumn('AthleteNumber');
    this.grid.unpinColumn('Name');
    

    両方のメソッドは操作に成功したかどうかを示すブール値を返します。よくある失敗の原因として列がすでにそのステートになっていることがあります。

    列をピン固定すると、一番右に配置されたピン固定列の右にピン固定されます。ピン固定列の順序を変更するには、columnPin イベントでイベント引数の insertAtIndex プロパティを適切な位置インデックスに変更します。

    <igx-grid #grid1 [data]="data | async" [autoGenerate]="true" (columnPin)="columnPinning($event)"></igx-grid>
    
    public columnPinning(event) {
        if (event.column.field === 'Name') {
            event.insertAtIndex = 0;
        }
    }
    

    ピン固定の位置

    pinning 設定オプションを使用して、列のピン固定の位置を変更できます。列の位置を Start または End のいずれかに設定できます。End に設定すると、列がピン固定されていない列の後に、グリッドの最後にレンダリングされます。 ピン固定されていない列は水平にスクロールできますが、ピン固定された列は右側に固定されます。

    <igx-grid [data]="data" [autoGenerate]="true" [pinning]="pinningConfig"></igx-grid>
    
    public pinningConfig: IPinningConfig = { columns: ColumnPinningPosition.End };
    

    デモ

    カスタム列ピン固定 UI

    カスタム UI を定義し、関連する API を介して列のピン状態を変更できます。

    ツールバーの代わりに、エンドユーザーが特定の列のピンの状態を変更するためにクリックできる列ヘッダーにピンアイコンを定義するとします。 これは、カスタムアイコンを使用して列のヘッダーテンプレートを作成することで実行できます。

    <igx-grid #grid1 [data]="data" [width]="'100%'" [height]="'500px'">
        <igx-column #col *ngFor="let c of columns" [field]="c.field" [header]="c.header" [width]="c.width" [pinned]='c.pinned'
            [hidden]='c.hidden' [headerClasses]="'customHeaderSyle'">
            <ng-template igxHeader>
                <div class="title-inner">
                    <span style="float:left">{{col.header}}</span>
                    <igx-icon class="pin-icon" fontSet="fas" name="fa-thumbtack" (click)="toggleColumn(col)"></igx-icon>
                </div>
            </ng-template>
        </igx-column>
    </igx-grid>
    

    カスタムアイコンをクリックすると、関連する列のピン状態は、列の API メソッドを使用して変更できます。

    public toggleColumn(col: ColumnType) {
        col.pinned ? col.unpin() : col.pin();
    }
    

    デモ

    ピン固定の制限

    • 列幅をパーセンテージ (%) で設定した場合にピン固定列があると Grid 本体およびヘッダー コンテンツが正しく配置されません。列のピン固定を正しく設定するには、列幅をピクセル (px) に設定するか、Grid によって自動的に割り当てる必要があります。

    スタイル設定

    igxGridを使用すると、Ignite UI for Angular テーマ ライブラリ でスタイルを設定できます。テーマ は、グリッドのすべての機能をカスタマイズできるさまざまなプロパティを公開します。

    以下の手順では、グリッドのピン固定スタイルをカスタマイズする手順を実行しています。

    グローバル テーマのインポート

    グループ化機能のカスタマイズは、すべてのスタイリング機能とミックスインが配置されている index ファイルをインポートする必要があります。

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

    カスタム テーマの定義

    次に、grid-theme を拡張し、必要に応じて Group By をカスタマイズするために必要なパラメーターを受け入れる新しいテーマを作成します。

    $custom-theme: grid-theme(
        /* Pinning properties that affect styling */
        $pinned-border-width: 5px,
        $pinned-border-style: double,
        $pinned-border-color: #FFCD0F,
        $cell-active-border-color: #FFCD0F
        /* add other features properties here... */
    );
    

    カスタム カラー パレットの定義

    上記で説明したアプローチでは、色の値がハード コーディングされていました。または、igx-palette および igx-color 関数を使用して、柔軟性を高めることができます。 Igx-palette は指定した一次色と二次色に基づいてカラーパレットを生成します。

    $primary-color: #292826;
    $secondary-color: #ffcd0f;
    
    $custom-palette: palette(
     $primary: $primary-color,
     $secondary: $secondary-color
    );
    

    カスタム パレットが生成された後、igx-color 関数を使用して、さまざまな種類の原色と二次色を取得できます。

    $custom-theme: grid-theme(
        $pinned-border-width: 5px,
        $pinned-border-style: double,
        $pinned-border-color: color($custom-palette, "secondary", 500),
        $cell-active-border-color: color($custom-palette, "secondary", 500)
    );
    

    $custom-theme には前のセクションと同じプロパティが含まれていますが、今回は色がハードコードされていません。代わりに、カスタム igx-palette パレットが使用され、特定のカラーバリアントを使用して、プライマリ カラーとセカンダリ カラーから色が取得されました。

    カスタム スキーマの定義

    さらに進んで、スキーマ のすべての利点を備えた柔軟な構造を構築できます。スキーマはテーマを作成させるための方法です。
    すべてのコンポーネントに提供される 2 つの事前定義されたスキーマの 1 つを拡張します。この場合、$_light_grid を使用します。

    $custom-grid-schema: extend($_light-grid,(
        pinned-border-width: 5px,
        pinned-border-style: double,
        pinned-border-color: color:("secondary", 500),
        cell-active-border-color: color:("secondary", 500)
    ));
    

    カスタム スキーマを適用するには、light グローバルまたは dark グローバルを拡張する必要があります。プロセス全体が実際にコンポーネントにカスタム スキーマを提供し、その後、それぞれのコンポーネントテーマに追加します。

    $my-custom-schema: extend($light-schema, ( 
        igx-grid: $custom-grid-schema
    ));
    $custom-theme: grid-theme(
        $palette: $custom-palette,
        $schema: $my-custom-schema
    );
    

    カスタム テーマの適用

    テーマを適用する最も簡単な方法は、グローバル スタイル ファイルに sass @include ステートメントを使用することです。

    @include grid($custom-theme);
    

    スコープ コンポーネント テーマ

    カスタム テーマが特定のコンポーネントのみに影響するように、定義したすべてのスタイルをグローバル スタイル ファイルからカスタム コンポーネントのスタイルファイルに移動できます (index ファイルのインポートを含む)。

    このように、Angular の ViewEncapsulation により、スタイルはカスタム コンポーネントにのみ適用されます。

    Note

    コンポーネントが Emulated ViewEncapsulation を使用している場合、グリッドのスタイル設定は ::ng-deep を使用してこのカプセル化を解除する必要があります。

    Note

    ステートメントがコンポーネントの外にある要素に影響を与えないよう、ステートメントを :host セレクター内にラップします。

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

    デモ

    Note

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

    API リファレンス

    その他のリソース

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