Blazor Grid の複数行レイアウト

    Grid のレンダリング機能を拡張します。この機能により、単一のデータレコードを複数の表示行に分割することができます。

    Blazor Grid 複数行レイアウトの例

    複数行レイアウトの宣言は、IgbColumnLayout コンポーネントによって実現されます。各 IgbColumnLayout コンポーネントは、単一または複数の IgbColumn コンポーネントを含むブロックと見なします。一部のグリッド機能はブロック レベルで機能します (下記の「機能の統合」セクション参照)。たとえば、仮想化ではブロックを使用して仮想チャンクを決定します。そのため、レイアウトで許容される場合は、パフォーマンスを向上させるために列を更に IgbColumnLayout ブロックに分割します。複数行のレイアウトを設定するときは、これらのブロックの外側に列がなく、IgbColumnGroup を使用しないでください。複数行のレイアウトは、グリッド レイアウト仕様上に実装されており、その要件に準拠する必要があります。

    IgbColumn は各セルの位置と範囲を決めるために 4 つの IgbInput プロパティを公開します。

    • ColStart - フィールドの開始位置となる列インデックス。このプロパティは必須です。
    • RowStart - フィールドの開始位置となる行インデックス。このプロパティは必須です。
    • ColEnd - 現在のフィールドが終了する位置の列インデックス。colStart と colEnd の間の列数によって、そのフィールドまでの列の幅が決まります。このプロパティはオプションです。設定されていない場合、デフォルトは colStart + 1 になります。
    • RowEnd - 現在のフィールドが終了する行インデックス。rowStart と rowEnd の間の行数によって、そのフィールドにまたがる行数が決まります。このプロパティはオプションです。設定されていない場合は、デフォルトで rowStart + 1 に設定されます。
    <IgbColumnLayout>
        <IgbColumn RowStart="1" RowEnd="3" ColStart="1" Field="ID"></IgbColumn>
    </IgbColumnLayout>
    <IgbColumnLayout>
        <IgbColumn RowStart="1" ColStart="1" ColEnd="3" Field="CompanyName"></IgbColumn>
        <IgbColumn RowStart="2" ColStart="1" ColEnd="2" Field="ContactName"></IgbColumn>
        <IgbColumn RowStart="2" ColStart="2" ColEnd="3" Field="ContactTitle"></IgbColumn>
    </IgbColumnLayout>
    <IgbColumnLayout>
        <IgbColumn RowStart="1" ColStart="1" ColEnd="3" Field="Country"></IgbColumn>
        <IgbColumn RowStart="1" ColStart="3" ColEnd="5" Field="Region"></IgbColumn>
        <IgbColumn RowStart="1" ColStart="5" ColEnd="7" Field="PostalCode"></IgbColumn>
        <IgbColumn RowStart="2" ColStart="1" ColEnd="4" Field="City"></IgbColumn>
        <IgbColumn RowStart="2" ColStart="4" ColEnd="7" Field="Address"></IgbColumn>
    </IgbColumnLayout>
    <IgbColumnLayout>
        <IgbColumn RowStart="1" ColStart="1" Field="Phone"></IgbColumn>
        <IgbColumn RowStart="2" ColStart="1" Field="Fax"></IgbColumn>
    </IgbColumnLayout>
    

    上記の設定の結果は、以下のスクリーンショットで確認できます。

    [!Note] RowStartColStart プロパティは、IgbColumnLayout 内の各 IgbColumn に設定する必要があります。IgbColumnLayout コンポーネントはレイアウトが正しいかどうかを検証しておらず、それについてエラーや警告をスローしません。開発者は、レイアウトの宣言が正しく、完全であることを確認し、誤った配置、オーバーラップ、ブラウザーでの不整合、レイアウトの崩れなどを回避する必要があります。

    機能の統合

    複数行レイアウトのレンダリング方法は全く異なるため、列ピン固定や列非表示など一部の列機能は IgbColumnLayout コンポーネントでのみ機能します。その他の機能ソートとグループ化などは、IgbColumn コンポーネントで同じように機能します。

    • フィルタリング - Excel スタイルのフィルタリングのみがサポートされています。FilterModeFilterMode.quickFilter に明示的に設定しても効果はありません。
    • ページング - 表示行ではなくレコードで機能します。
    • グループ化 - HideGroupedColumns オプションは、複数行レイアウトでは効果がありません。グループ化された列は常に表示されます。

    以下の機能は現在サポートされません

    • 列の移動
    • 複数列ヘッダー
    • Excel へのエクスポート
    • 集計

    キーボード ナビゲーション

    複数行レイアウトを持つ IgbGrid は、ビルトインのキーボード ナビゲーションを提供します。

    水平ナビゲーション

    • または は、現在行内の左右に隣接するセルに移動します。定義されている列レイアウトの影響を受けません。現在のセルが複数の行にまたがる場合は、他の隣接するセルへ移動した場合を除き、 は、同じ rowStart で左右の最初のセルに移動します。ナビゲーションはナビゲーション開始セルを格納し、可能であれば同じ rowStart を持つセルに移動します。
    • Ctrl + (HOME) または Ctrl + (END) - 行の先頭または末尾に移動し、ナビゲーション開始セルに従ってセルを選択します。

    垂直ナビゲーション

    • または - 開始位置に対して上下のセルに移動し、行の影響は受けません。現在のセルが複数の列にまたがる場合は、次のアクティブ セルがナビゲーション開始セルに従って選択されます。
    • Ctrl + または Ctrl + - 最初の行または最後の行の同じ列に移動してフォーカスを適用します。
    • Ctrl + Home または Ctrl + End - 最初の行に移動して最初のセルに移動するか、最後のセルに移動します。最後のセルに移動してフォーカスを合わせます。

    [!Note] 複数の行または列にわたるセルを介したナビゲーションは、ナビゲーション開始セルに従って行われ、反対方向のキーを使用して開始セルに戻ることができます。グループ行を移動するときにも同じ方法が使用されます。

    [!Note] 選択と複数セル選択はレイアウトで使用できます。つまり、セルがアクティブになると、そのレイアウトが選択されます。ドラッグ選択などの複数選択のすべての機能も適用可能であり、セルごとではなくレイアウトごとに機能します。

    カスタム キーボード ナビゲーション

    グリッドでは、特定のキーが押されたときのデフォルトのナビゲーション動作をカスタマイズできます。隣りのセルまたは下のセルへ移動するような操作は、キーボード ナビゲーション API を使用して簡単に処理できます。

    • GridKeydown が公開されています。イベントは IGridKeydownEventArgs を発生します。このイベントは、キーボードで上記のキー組み合わせを介してのみ使用できます。他のすべてのキー操作では、KeyDown イベントを使用できます。
    • NavigateTo - このメソッドを使用すると、提供された RowIndexVisibleColumnIndex に基づいて位置に移動できます。

    以下のデモでは、Excel と同じように、EnterShift + Enter キーを使って追加のナビゲーションを使用します。

    デモ

    スタイル設定

    定義済みのテーマに加えて、利用可能な CSS プロパティのいくつかを設定することで、グリッドをさらにカスタマイズできます。 一部の色を変更したい場合は、最初にグリッドのクラスを設定する必要があります。

    <IgbGrid class="grid"></IgbGrid>
    

    次に、そのクラスに関連する CSS プロパティを設定します。

    .grid {
        --ig-grid-cell-active-border-color: #ffcd0f;
        --ig-grid-cell-selected-background: #6f6f6f;
        --ig-grid-row-hover-background: #fde069;
        --ig-grid-row-selected-background: #8d8d8d;
        --ig-grid-header-background: #494949;
        --ig-grid-header-text-color: #fff;
    }
    

    デモ

    API リファレンス

    その他のリソース

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