Close
Angular React Web Components Blazor
Premium

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

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

リモート仮想化

IgrGrid は、データ チャンクがリモート サービスから要求されるシナリオをサポートし、内部で使用される ForOf ディレクティブで実装された動作を公開します。

この機能を使用するには、取得した引数に基づいて適切な要求を実行するために DataPreLoad 出力にサブスクライブし、サービスから送信される相対する情報とパブリック IgrGridTotalItemCount プロパティを設定する必要があります。

データを要求する際に StartIndex および ChunkSize プロパティを提供する IForOfState インターフェイスを使用できます。

最初の ChunkSize は常に 0 で、特定のアプリケーション シナリオに基づいて設定する必要があります。

リモートの仮想化デモ

一意の列値ストラテジ

Excel スタイル フィルタリング ダイアログ内のリスト項目は、それぞれの列の一意の値を表します。IgrGrid は、デフォルトでデータソースに基づいてこれらの値を生成します。リモート フィルタリングの場合、グリッドのデータにはサーバーからのすべてのデータが含まれていません。これらの一意の値を手動で提供し、オンデマンドで読み込むために、IgrGridUniqueColumnValuesStrategy 入力を利用できます。この入力は、実際には 3 つの引数を提供するメソッドです。

const CUSTOMERS_URL = `https://data-northwind.indigo.design/Customers/GetCustomersWithPage`;

export class RemoteService {

    public static getDataWithPaging(pageIndex?: number, pageSize?: number) {
        return fetch(this.buildUrl(CUSTOMERS_URL, pageIndex, pageSize))
        .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}`;
    }
}
  • IgrColumn - それぞれの列インスタンス。
  • FilteringExpressionsTree - フィルタリング式ツリー。各列に基づいて削減されます。
  • Done - サーバーから取得されたときに、新しく生成された列値で呼び出されるコールバック。
     <IgrGrid
          ref={grid}
          data={data}
          pagingMode="remote"
          primaryKey="customerId"
          height="600px"
          isLoading={isLoading}
        >
        <IgrPaginator
          perPage={perPage}
          ref={paginator}
          onPageChange={onPageNumberChange}
          onPerPageChange={onPageSizeChange}>
        </IgrPaginator>
          <IgrColumn field="customerId" hidden={true}></IgrColumn>
          <IgrColumn field="companyName" header="Company Name"></IgrColumn>
          <IgrColumn field="contactName" header="Contact Name"></IgrColumn>
          <IgrColumn field="contactTitle" header="Contact Title"></IgrColumn>
          <IgrColumn field="address.country" header="Country"></IgrColumn>
          <IgrColumn field="address.phone" header="Phone"></IgrColumn>
        </IgrGrid>

then set up the state:

  const grid = useRef<IgrGrid>(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]);

and finally set up the method for loading the data:

  function loadGridData(pageIndex?: number, pageSize?: number) {
    // Set loading state
    setIsLoading(true);

    // Fetch data
    RemoteService.getDataWithPaging(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);
      })
  }

For further reference please check the full sample bellow:

Grid Remote Paging Demo

開発者は、IgrColumnFilteringExpressionsTree 引数によって提供される情報に基づいて、必要な一意の列値を手動で生成し、Done コールバックを呼び出すことができます。

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

まず、グリッドにデータを読み込む必要があります。タイミングの問題を回避するには、グリッドが描画された後に実行することをお勧めします。

その後は、ページング イベントをカスタム メソッドにバインドするだけで、リモート ページングが設定されます。

API リファレンス

IgrGrid
IgrPaginator

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

まず、関連するイベントにバインドして、ページを変更したり、ページごとに表示されるレコードの量を変更したりするときに、リモート サービスが正しい量のデータを取得するようにする必要があります。

また、データを読み込む方法を設定し、それに応じて UI を更新する必要があります。

最後に、階層グリッドの実際の階層レベルの背後にある動作を処理する必要があります。