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

    React Grid の Ignite UI for React キーボード ナビゲーションは、さまざまなキーボード操作をユーザーに提供します。これにより IgrGrid のアクセシビリティが向上し、内部の要素 (セル、行、列ヘッダー、ツールバー、フッターなど) をナビゲートできるようになります。この機能はデフォルトで有効になっています。デフォルトの動作を簡単にオーバーライドするオプションがあります。

    IgrGrid のタブが削減され、ナビゲーションが W3C のアクセシビリティ標準に準拠し、使いやすくなりました。

    現在、IgrGrid には以下のタブ位置が導入されています。

    • グループ化またはツールバーの領域 (有効な場合)
    • Grid ヘッダー
    • Grid 本体
    • 列の集計 (有効な場合)
    • Grid ページネーター (有効な場合)

    [!Note] この変更のため、TabShift + Tab キーでセル間を移動することは IgrGrid でサポートされなくなりました。 Tab キーを押すと、グループ化 / ツール バー -> ヘッダー -> 本体 -> 集計 -> フッター/ページネーターの順序にタブ位置を移動します。

    [!Note] テンプレートによっフォーカス可能な要素を IgrGrid の本体に公開すると、ブラウザのデフォルトの動作が防止されていないため、予期されない結果が発生する可能性があります。 したがって、それを適切に防止/変更するのは開発者の責任です。

    ヘッダー ナビゲーション

    IgrGrid ヘッダーのキーボード ナビゲーションが完全にサポートされるようになりました。列ヘッダーは矢印キーで簡単にトラバースできます。さらに、フィルタリングソートグループ化などの列操作をトリガーするキーの組み合わせがいくつかあります。 IgrGrid ヘッダー コンテナーがフォーカスされている場合、以下のキー組み合わせを使用できます。

    キーの組み合わせ

    • - ヘッダーで 1 つ上のセルへ移動 (ループなし)複数行レイアウトまたは複数列ヘッダーが定義されている場合のみ使用できます。
    • - ヘッダーの 1 つ下のセルに移動 (ラッピングなし)複数行レイアウトまたは複数列ヘッダーが定義されている場合のみ使用できます。
    • - 1 つ左のセルへ移動 (ループなし)
    • - 1 つ右のセルへ移動 (行間のラッピングなし)
    • Ctrl + - 行の左端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの左端のセルへ移動
    • Home - 行の左端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの左端のセルへ移動
    • Ctrl + - 行の右端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの右端のセルへ移動
    • End - 行の右端のセルへ移動; 複数行レイアウトまたは複数列ヘッダーが有効な場合、同じレベルの右端のセルへ移動
    • Alt + L - 詳細フィルタリングが有効な場合、詳細フィルタリング ダイアログを開きます。
    • Ctrl + Shift + L - 列がフィルター可能な場合、Excel スタイル フィルターまたはデフォルト (行) フィルターを開きます。
    • Ctrl + - アクティブな列ヘッダーを昇順にソートします。列が昇順で既にソートされている場合、ソート状態を削除します。
    • Ctrl + - アクティブな列ヘッダーを降順にソートします。列が降順で既にソートされている場合、ソート状態を削除します。
    • Space - 列を選択します。列がすでに選択されている場合、選択を解除します。
    • Shift + Alt + - 列がグループ化可能としてマークされている場合、列をグループ化します。
    • Shift + Alt + - 列がグループ化可能としてマークされている場合、列のグループ化を解除します。
    • Alt + または Alt + - 列が縮小されていない場合、列グループ ヘッダーを縮小します。
    • Alt + または Alt + - 列がまだ展開されていない場合、列グループヘッダーを展開します。

    本体ナビゲーション

    IgrGrid 本体がフォーカスされている場合、以下のキー組み合わせを使用できます。

    キーの組み合わせ

    • - 1 つ上のセルへ移動。
    • - 1 つ下のセルへ移動。
    • - 1 つ左のセルへ移動 (行間のラッピングなし)
    • - 1 つ右のセルへ移動 (行間のラッピングなし)
    • Ctrl + - 行の左端のセルへ移動
    • Ctrl + - 行の右端のセルへ移動
    • Ctrl + - 列の最初のセルへ移動
    • Ctrl + - 列の最後のセルへ移動
    • Home - 行の左端のセルへ移動
    • End - 行の右端のセルへ移動
    • Ctrl + Home - グリッドの最も左上のデータ セルへ移動
    • Ctrl + End - グリッドの最も右下のデータ セルへ移動
    • Page Up - 1 ページ (ビューポート) 上へスクロール
    • Page Down - 1 ページ (ビューポート) 下へスクロール
    • Enter - 編集モードに入る
    • F2 - 編集モードに入る
    • Esc - 編集モードを終了する
    • Tab - 編集モードのセルがある場合のみ使用できます。行の次の編集可能なセルにフォーカスを移動します。行の最後のセルに達した場合、フォーカスを次の行の最初の編集可能なセルに移動します。行編集が有効な場合、フォーカスを編集可能な一番右のセルから [キャンセル] および [完了] ボタンへ移動し、[完了] ボタンから行の一番左の編集可能なセルへ移動します。
    • Shift + Tab - 編集モードのセルがある場合のみ使用できます。行の一つ前の編集可能なセルにフォーカスを移動します。行の最初のセルに達した場合、フォーカスを前の行の最後の編集可能なセルに移動します。行編集が有効な場合、フォーカスを編集可能な一番右のセルから [キャンセル] および [完了] ボタンへ移動し、[完了] ボタンから行の一番右の編集可能なセルへ移動します。
    • Space - 行の選択が有効な場合、行を選択します。
    • Alt + または Alt + -

    グループ行はグループを縮小します。

    • Alt + または Alt + - グループ行はグループを展開します。
    • Alt + または Alt + - マスター/詳細行で詳細ビューを縮小します。
    • Alt + または Alt + - マスター/詳細行で詳細ビューを展開します。
    • Space - グループ行上 - RowSelection プロパティが複数に設定されている場合、グループ内のすべての行を選択します。

    以下のデモサンプルで上記のすべての操作を実行できます。ナビゲーション可能なグリッド要素をフォーカスすると、利用可能な操作のリストが表示されます。

    デモ

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

    特定のキーまたはキーの組み合わせのデフォルトの動作をオーバーライドすることができるは、キーボード ナビゲーション機能の利点の 1 つです。たとえば、Enter キーまたは Tab キーを押して次のセルまたは下のセルへ移動します。 この以外のナビゲーションシナリオでも、Keyboard Navigation API で簡単に実現できます。


    API を使用して、ユーザー入力の検証やカスタム ナビゲーションなどの一般的なシナリオを実現する方法を示します。最初に、GridKeydown イベントのイベント ハンドラーを登録する必要があります。

    <IgrGrid id="grid1" primaryKey="ProductID" gridKeydown={customKeydown}>
    </IgrGrid>
    
    constructor() {
            var grid = this.grid = document.getElementById('grid') as IgrGridComponent;
    		grid.data = this.data
    		grid.addEventListener("gridKeydown", this.customKeydown);
    	}
    
    function customKeydown(s: IgrGridBaseDirective, e: IgrGridKeydownEventArgs) {
      const detail = e.detail
      const target= detail.target;
      const evt = detail.event;
      const type = detail.targetType;
    
      if (type === GridKeydownTargetType.DataCell && target.editMode && evt.key.toLowerCase() === 'tab') {
          // 1. USER INPUT VALIDATION ON TAB
          
      }
      if (type === GridKeydownTargetType.DataCell && evt.key.toLowerCase() === 'enter') {
          // 2. CUSTOM NAVIGATION ON ENTER KEY PRESS
    
      }
    }
    

    イベント引数の値に基づいて、独自のロジックを提供する 2 つのケースを特定しました (上記を参照)。API のメソッドを使用して、目的の処理を実行しましょう。ユーザーが編集モードのセル上で Tab キーを押すと、入力の検証を実行します。

        // 1. USER INPUT VALIDATION ON TAB
        if (target.column.dataType === 'number' && target.editValue < 10) {
            // alert the user that the input is invalid
            return;
        }
    

    [!Note] 実装の詳細は、サンプルコードを参照してください。

    実装したカスタム シナリオを試すには以下のデモを使用してください。

    • 数値列のセルをダブルクリックするか F2 キーを押し、値を 7 に変更して Tab キーを押します。プロンプト メッセージが表示されます。
    • セルを選択して Enter キー を数回押します。キーを押すたびに、同じ列の下にある次の行のセルへフォーカスを移動します。

    デモ

    既知の問題と制限

    制限 説明
    スクロール可能な親コンテナーを使用してグリッド内を移動します。 グリッドがスクロール可能な親コンテナー内に配置され、ユーザーが表示されていないグリッドのセルへ移動した場合、親コンテナーはスクロールされません。

    その他のリソース

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