React Hierarchical Grid のリモート データ操作

    デフォルトで、IgrHierarchicalGrid は独自のロジックを使用してデータ操作を実行します。

    これらのタスクをリモートで実行し、IgrHierarchicalGrid で公開される特定の入力とイベントを使用して IgrHierarchicalGrid に結果のデータを供給できます。

    リモート ページング

    const BASE_URL = `https://data-northwind.indigo.design/`;
    const CUSTOMERS_URL = `${BASE_URL}Customers/GetCustomersWithPage`;
    
    export class RemoteService {
    
        public static getCustomersDataWithPaging(pageIndex?: number, pageSize?: number) {
            return fetch(this.buildUrl(CUSTOMERS_URL, pageIndex, pageSize))
            .then((result) => result.json());
        }
    
        public static getHierarchyDataById(parentEntityName: string, parentId: string, childEntityName: string) {
            return fetch(`${BASE_URL}${parentEntityName}/${parentId}/${childEntityName}`)
            .then((result) => result.json());
        }
    
        private static buildUrl(baseUrl: string, pageIndex?: number, pageSize?: number) {
            let qS = "";
            if (baseUrl) {
                    qS += `${baseUrl}`;
            }
    
            // Add pageIndex and size to the query string if they are defined
            if (pageIndex !== undefined) {
                qS += `?pageIndex=${pageIndex}`;
                if (pageSize !== undefined) {
                    qS += `&size=${pageSize}`;
                }
            } else if (pageSize !== undefined) {
                qS += `?perPage=${pageSize}`;
            }
    
            return `${qS}`;
        }
    }
    tsx

    サービスを宣言した後にコンポーネントを作成する必要があり、IgrHierarchicalGrid コンストラクションとデータ サブスクリプションを処理します。

    次に状態を設定します。

      const hierarchicalGrid = useRef<IgrHierarchicalGrid>(null);
      const paginator = useRef<IgrPaginator>(null);
    
      const [data, setData] = useState([]);
      const [page, setPage] = useState(0);
      const [perPage, setPerPage] = useState(15);
      const [isLoading, setIsLoading] = useState(true);
    
      useEffect(() => {
        loadGridData(page, perPage);
      }, [page, perPage]);
    tsx

    次に、データを読み込むためのメソッドを設定します。

      function loadGridData(pageIndex?: number, pageSize?: number) {
        // Set loading state
        setIsLoading(true);
    
        // Fetch data
        RemoteService.getCustomersDataWithPaging(pageIndex, pageSize)
          .then((response: CustomersWithPageResponseModel) => {
            setData(response.items);
            // Stop loading when data is retrieved
            setIsLoading(false);
            paginator.current.totalRecords = response.totalRecordsCount;
          })
          .catch((error) => {
            console.error(error.message);
            setData([]);
            // Stop loading even if error occurs. Prevents endless loading
            setIsLoading(false);
          })
      }
    tsx

    最後に、RowIslands の動作を設定します。

      function gridCreated(rowIsland: IgrRowIsland, event: IgrGridCreatedEventArgs, parentKey: string) {
        const context = event.detail;
        const parentId: string = context.parentID;
        const childDataKey: string = rowIsland.childDataKey;
    
        RemoteService.getHierarchyDataById(parentKey, parentId, childDataKey)
          .then((data: any) => {
            context.grid.data = data;
            context.grid.isLoading = false;
            context.grid.markForCheck();
          })
          .catch((error) => {
            console.error(error.message);
            context.grid.data = [];
            context.grid.isLoading = false;
            context.grid.markForCheck();
          })
      }
    tsx

    詳細については、以下の完全なサンプルをご覧ください。

    グリッド リモート ページングのデモ

    EXAMPLE
    CustomersWithPageResponseModel.ts
    RemoteService.ts
    TSX
    CSS

    このサンプルが気に入りましたか? 完全な Ignite UI for Reactツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。

    既知の問題と制限

    • グリッドに PrimaryKey が設定されておらず、リモート データ シナリオが有効になっている場合 (ページング、ソート、フィルタリング、スクロール時に、グリッドに表示されるデータを取得するためのリモート サーバーへのリクエストがトリガーされる場合)、データ要求が完了すると、行は次の状態を失います:
    • 行の選択
    • 行の展開/縮小
    • 行の編集
    • 行のピン固定
    Ignite UI for React | CTA Banner

    API リファレンス

    その他のリソース

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