[]
ODataVirtualCollectionView クラスの新しいインスタンスを初期化します。
ODataサービスのURL(例: 'http://services.odata.org/Northwind/Northwind.svc')。
サービスから取得するテーブル(エンティティ)の名前。指定されない場合は、有効なテーブル(エンティティ)のリストが取得されます。
{@link ODataVirtualCollectionViewの初期化データ}(プロパティ値とイベントハンドラ)を含むJavaScriptオブジェクト。
コレクションに新しい項目を追加できるかどうかを示す値を取得します。
適用前の変更を破棄して編集されたオブジェクトの元の値を復元できるかどうかを示す値を取得します。
pageIndex 値を変更できるかどうかを示す値を取得します。
このビューがfilter プロパティによってフィルタリングをサポートしているかどうかを示す値を取得します。
ODataVirtualCollectionView では、canGroup をfalseに設定する必要があります。
コレクションから項目を削除できるかどうかを示す値を取得します。
このビューがsortDescriptions プロパティによってソートをサポートしているかどうかを示す値を取得します。
現在の追加トランザクションの間に追加される項目を取得します。
現在の編集トランザクションの間に編集される項目を取得します。
ビューの現在の項目を取得します。
ビューの現在の項目の順序位置を取得します。
データのロード中にデータ型を変換するためのマップとして使用されるJavaScriptオブジェクトを取得または設定します。
オブジェクトのキーはフィールド名を表し、値はそのデータをどのように型変換するかを示すDataType 値を表します。以下のサンプルコードは、 ODataCollectionView を作成した後、(データベースに文字列として格納されている)'Freight'の値を数値に変換し、さらに3つの日付フィールドを日付に変換します。
import { ODataCollectionView } from '@grapecity/wijmo.odata';
var orders = new ODataCollectionView(url, 'Orders', {
dataTypes: {
Freight: wijmo.DataType.Number
OrderDate: wijmo.DataType.Date,
RequiredDate: wijmo.DataType.Date,
ShippedDate: wijmo.DataType.Date,
}
});
このプロパティは、データベースに格納されているデータの書式が一般的な用法に適合していない場合に役立ちます。 inferDataTypes プロパティによってDate値の変換が自動的に処理されるため、ほとんどの場合、データ型に関する情報を提供する必要はありません。 明示的に型情報を提供した場合、inferDataTypes プロパティは適用されません。 そのため、データ型の情報を提供する場合は、Date型のフィールドも含め、 すべてのフィールドの型情報を提供する必要があります。
関連エンティティを返すデータに含めるかどうかを指定する文字列を取得または設定します。
このプロパティは直接ODataの$expandオプションにマップされます。
たとえば、次のコードは、すべての顧客とその注文をデータベースから取得します。 各顧客エンティティには、注文オブジェクトの配列を含む[Orders]フィールドが含まれています。
var url = 'http://services.odata.org/Northwind/Northwind.svc'; var customersOrders = new wijmo.odata.ODataCollectionView(url, 'Customers', { expand: 'Orders' });
データソースから取得するフィールドの名前を含む配列を取得または設定します。
このプロパティがnullまたは空の配列に設定されている場合は、 すべてのフィールドが 取得されます。
たとえば、以下のコードは、データベースの'Categories'テーブルから3つの フィールドのみを取得する ODataCollectionView を作成します。
import { ODataCollectionView } from '@grapecity/wijmo.odata';
var categories = new ODataCollectionView(url, 'Categories', {
fields: ['CategoryID', 'CategoryName', 'Description']
});
項目がビューに含める対象として適しているかどうかを判断するために使用されるコールバックを取得または設定します。
このコールバック関数がtrueを返した場合、 パラメーターとして渡された項目はビューに含まれます。
メモ: フィルタ関数でスコープ(すなわち、有効な'this'値)が必要な場合は、 'this'オブジェクトを指定した'bind'関数を使用してフィルタを設定します。 例:
collectionView.filter = this._filter.bind(this);
サーバーでデータをフィルタ処理するために使用されるODataフィルタ仕様 を含む文字列を取得または設定します。
フィルタ定義構文については、ODataドキュメントを参照してください。たとえば、以下のコードでは、 'CompanyName'フィールドが'A'で始まり'S'で終わるレコードがサーバーから返されます。
view.filterDefinition = "startswith(CompanyName, 'A') and endswith(CompanyName, 'B')";
フィルタ定義は自動生成することができます。 たとえば、FlexGridFilter コンポーネントは、データソースがODataCollectionView かどうかを検出し、 ODataCollectionView.filter プロパティとODataCollectionView.filterDefinition プロパティの両方を自動的に更新します。 ODataCollectionView.filterDefinition プロパティは、ODataCollectionView.filterOnServer プロパティがfalseに設定されている場合でも 適用されることに注意してください。 これにより、同じコレクションに対してサーバーフィルタとクライアントフィルタの両方を適用でき、 さまざまなシナリオで役立ちます。 たとえば、次のコードは、ODataCollectionView.filterDefinition プロパティを使用してサーバーでフィルタ処理を実行し、 ODataCollectionView.filter プロパティを使用してクライアントでさらにフィルタ処理を実行します。 結果のコレクションには、名前が'C'で始まり、単価が20より大きい項目が表示されます。
var url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; var data = new wijmo.odata.ODataCollectionView(url, 'Products', { oDataVersion: 4, filterDefinition: 'startswith(ProductName, \'C\')', // サーバー側のフィルタ filterOnServer: false, // クライアント側のフィルタ filter: function(product) { return product.UnitPrice > 20; }, });
ODataVirtualCollectionView では、filterOnServer をtrueに設定する必要があります。
このCollectionView でフィルターとして使用される{@link Ipredicate} 関数の配列を取得します。
項目の特定のプロパティに検証エラーが含まれているかどうかを判定するコールバックを取得または設定します。
指定すると、コールバックは、検証する項目とプロパティを含む2つのパラメータを受け取り、 エラーを説明する文字列を返します(エラーがない場合はnull)。
次に例を示します。
import { CollectionView } from '@grapecity/wijmo';
var view = new CollectionView(data, {
getError: function (item, property) {
switch (property) {
case 'country':
return countries.indexOf(item.country) < 0
? 'Invalid Country'
: null;
case 'downloads':
case 'sales':
case 'expenses':
return item[property] < 0
? '負にはできません。'
: null;
case 'active':
return item.active && item.country.match(/US|UK/)
? 'USまたはUKではアクティブな項目が許可されません'
: null;
}
return null;
}
});
コレクションの項目をビューでどのようにグループ化するかを記述するGroupDescription オブジェクトのコレクションを取得します。
最上位レベルのグループを表すCollectionViewGroup オブジェクトの配列を取得します。
標準の日付表現のような文字列を含むフィールドを 自動的に日付に変換するかどうかを決定する 値を取得または設定します。
ODataCollectionView クラスは、DateオブジェクトをサポートしていないJSON形式を 使用するため、 このプロパティはデフォルトでtrueに設定されます。
dataTypes プロパティを使用して特定のタイプ情報を指定する場合、このプロパティは無効になります。
追加トランザクションが進行中であるかどうかを示す値を取得します。
編集トランザクションが進行中であるかどうかを示す値を取得します。
このビューに項目が1つも含まれていないかどうかを示す値を取得します。
ODataCollectionView が現在データをロードしていることを示す 値を取得します。
このプロパティを使用して、進捗状況インジケータを提供できます。
ページインデックスが変更されているかどうかを示す値を取得します。
通知が現在中断されているかどうかを示す値を取得します(beginUpdate およびendUpdate を参照)。
ページングを適用する前のビューの既知の項目の数を取得します。
ビューの項目を取得します。
trackChanges が有効化されてから、コレクションに追加されたレコードを含むObservableArray を取得します。
trackChanges が有効化されてから、コレクションで編集されたレコードを含むObservableArray を取得します。
trackChanges が有効化されてから、コレクションから削除されたレコードを含むObservableArray を取得します。
サーバーから返されるJSON値を解析するときに使用するカスタムのreviver関数を取得または設定します。
提供されている場合、関数は2つのパラメータ(キーおよび値)があり、 解析された値(元の値と同じ値の場合があります)を返さなければなりません。
reviver関数の詳細については、JSON.parse methodを参照してください。
キーフィールドの名前を含む配列を取得または設定します。
更新操作(追加/削除/完全削除)にはキーフィールドが必要です。
コレクションの新しい項目を作成する関数を取得または設定します。
作成関数が提供されない場合、CollectionView は、適切な型の項目を 初期化せずに作成しようとします。
作成関数が提供される場合、その関数は、パラメータを受け取らず、 コレクションに対して適切な型のオブジェクトを初期化して返す 必要があります。
サーバーによって使用されるODataのバージョンを取得または設定します。
現在、ODataサービスには1.0~4.0の4つのバージョンがあります。 最新サービスではバージョン4.0が使用されていますが、 レガシーサービスも依然として数多く運用されています。
利用するサービスが実装しているODataのバージョンがわかっている場合は、 ODataCollectionView を作成するときに、 oDataVersion プロパティを適切な値(1~4)に設定します(以下の例を参照)。
var url = 'http://services.odata.org/Northwind/Northwind.svc'; var categories = new wijmo.odata.ODataCollectionView(url, 'Categories', { oDataVersion: 1.0, // レガシーODataソース fields: ['CategoryID', 'CategoryName', 'Description'], sortOnServer: false });
利用するサービスが実装しているODataのバージョンがわからない場合 (おそらく、 ODataエクスプローラアプリケーションを記述している場合)には、 バージョンは指定しないでください。 その場合、 ODataCollectionView この情報をサーバーから取得します。この操作には追加のリクエストが必要ですが、 サービスURLあたり1回だけなので、オーバーヘッドは大きくありません。
総ページ数を取得します。
現在のページの0から始まるインデックスを取得します。
ODataVirtualCollectionView では、pageOnServer をtrueに設定する必要があります。
1ページに表示する項目数を取得または設定します。
CollectionView が、アイテムの編集後に結果(ソート、フィルター、およびグループ化を適用する)を自動的に更新するかどうかを決定する値を取得または設定します。
このプロパティはデフォルトで true に設定されます。これにより、 編集が完了した後にコレクションが常に正しくソート、フィルタリング、およびグループ化されるようにします。
false に設定する場合、アイテムの編集時に更新を遅延されます。 この場合、ソート、フィルタリング、およびグループ化の基準が変更されるか、 またはExcelと同様にrefresh メソッドが呼び出されるまで、コレクションは更新されません。
データを送信または要求するときに使用する要求ヘッダーを含むオブジェクトを取得または設定します。
このプロパティは、認証が必要なシナリオでよく使用されます。 次に例を示します。
import { ODataCollectionView } from '@grapecity/wijmo.odata';
var categories = new ODataCollectionView(serviceUrl, 'Categories', {
fields: ['Category_ID', 'Category_Name'],
requestHeaders: { Authorization: db.token }
});
日付を現地日ではなくGMTのように調整するかどうかを決定する値を取得または設定します。
ソート時に値の比較に使用する関数を取得または設定します。
指定された場合、ソート比較関数は、パラメータとして任意の型の値を 2つ取り、最初の値が2番目の値と比べて小さい、等しい、または大きい のいずれであるかを示す値-1、0、または+1を返します。ソート比較関数がnullを返す場合は、標準の組み込み比較子が使用されます。
このsortComparer プロパティを使用すると、カスタム比較アルゴリズムを 提供でき、単純な文字列比較より、ユーザーが期待する結果によく 一致するソートシーケンスが得られる場合があります。
たとえば、 Dave Koele's Alphanum algorithmを参照してください。 このアルゴリズムは、文字列を文字列や数値から成る部分に分割した後、 数値部分は値順に、文字列部分はASCII順にソートします。 Daveは、この結果を「自然なソート順」と呼んでいます。
次の例は、sortComparer プロパティの一般的な使用方法を示します。
// カスタムソート比較子を使用してCollectionViewを作成します var dataCustomSort = new wijmo.collections.CollectionView(data, { sortComparer: function (a, b) { return wijmo.isString(a) && wijmo.isString(b) ? alphanum(a, b) // 文字列に使用するカスタム比較子 : null; // 文字列以外にはデフォルトの比較子を使用します } });
次の例は、 Intl.Collator を使用してソート順を制御する方法を示しています。
// Intl.Collatorを使用してソートするCollectionViewを作成します var collator = window.Intl ? new Intl.Collator() : null; var dataCollator = new wijmo.collections.CollectionView(data, { sortComparer: function (a, b) { return wijmo.isString(a) && wijmo.isString(b) && collator ? collator.compare(a, b) // 文字列に使用するカスタム比較子 : null; // 文字列以外にはデフォルトの比較子を使用します } });
ソート時の値の変換に使用される関数を取得または設定します。
指定されている場合、この関数は、SortDescription、データ項目、および変換する値をパラメーターとして受け取り、 変換後の値を返す必要があります。
このプロパティはソートの動作をカスタマイズする手段を提供します。 たとえば、 FlexGrid コントロールはこのプロパティを使用して、 マップされた列を生の値ではなく表示値を基準にソートします。
以下のサンプルコードは、国コードの整数を含む'country'プロパティをソートするときに、 対応する国名を使用してソートされるようにします。
var countries = 'US,Germany,UK,Japan,Italy,Greece'.split(','); collectionView.sortConverter = function (sd, item, value) { if (sd.property == 'countryMapped') { value = countries[value]; // 国IDを国名に変換します } return value; }
コレクションの項目をビューでどのようにソートするかを記述するSortDescription オブジェクトの配列を取得します。
コレクションをソートする時(ソート方向に関係なく)、null値を最初に表示するか最後に表示するかを決定する値を取得または設定します。
このプロパティはデフォルトでfalseに設定されます。これにより、コレクションをソートするとNULL値が最後に表示されます。 この動作はExcelと同じです。
ODataVirtualCollectionView では、sortOnServer をtrueに設定する必要があります。
基になる(フィルタリングもソートもされていない)コレクションを取得または設定します。
このコレクションがバインドされているテーブル(エンティティ)の名前を取得します。
ページングを適用する前のビュー内の項目の合計数を取得します。
コントロールがデータの変更を追跡するかどうかを決定する値を取得または設定します。
trackChanges がtrueに設定されている場合、CollectionView は、 データの変更を追跡し、itemsAdded、itemsRemoved、itemsEdited の 各コレクションを介して変更を公開します。変更の追跡は、変更が有効であることをユーザーが確認した後にサーバーを更新する必要がある場合に役立ちます。
変更をコミットまたはキャンセルしたら、clearChanges メソッドを使用して、 itemsAdded、itemsRemoved、itemsEdited の各コレクションをクリアします。 CollectionView は、適切なCollectionView メソッド(editItem /commitEdit、 addNew /commitNew、remove)を使用して行われた変更だけを追跡します。 データに直接行われた変更は追跡されません。
安定したソートアルゴリズムを使用するかどうかを取得または設定します。
安定したソートアルゴリズムは、同じキーを持つレコード間の相対的な順序を維持します。 たとえば、"Amount"フィールドを持つオブジェクトのコレクションを考えてみます。 このコレクションを"Amount"でソートする場合、安定したソートでは、 Amount値が同じレコード間で元の順序が保たれます。
このプロパティのデフォルトは false です。この場合は、 高速だが安定ではないJavaScriptの組み込みソートメソッドが CollectionView で使用されます。
useStableSort をtrueに設定すると、すべてのブラウザーで安定したソートが保証されますが、ソート時間が30%~50%も長くなります。
注意:Chromeはバージョン70以降、Firefoxバージョン3以降は安定したソートを提供します。 ES2019の場合 、ソートは安定している必要があります。 ES2018までのECMAScript第1版では、不安定になることが許可されていました。
新しい項目を作成し、コレクションに追加します。
このメソッドは、パラメータを受け取りません。 新しい項目を作成し、それをコレクションに追加し、新しい項目がcommitNew メソッドでコミットされるか、 cancelNew メソッドでキャンセルされるまで、リフレッシュ操作を保留します。
次のコードは、addNew メソッドの典型的な使用方法を示します。
// 新しい項目を作成し、それをコレクションに追加します var newItem = view.addNew(); // 新しい項目を初期化します newItem.id = getFreshId(); newItem.name = '新しい顧客'; // ビューをリフレッシュできるように新しい項目をコミットします view.commitNew();
新しい項目をsourceCollection にプッシュしてから、refresh メソッドを呼び出すことで、 新しい項目を追加することもできます。addNew では、 ユーザーが追加操作をキャンセルできるため、ユーザー対話式のシナリオ(データグリッドに新しい項目の追加するなど)で特に便利です。 また、追加操作がコミットされるまで、新しい項目がソートされたり、 フィルタ処理でビューから除外されないようにします。
The item that was added to the collection.
次にendUpdate が呼び出されるまで更新を中断します。
現在の編集トランザクションを終了し、可能であれば項目を元の値に戻します。
現在の追加トランザクションを終了し、追加前の新しい項目を破棄します。
itemsAdded 、itemsRemoved 、itemsEdited の各コレクションの全項目をクリアすることによってすべての変更をクリアします。
このメソッドは、変更をサーバーに確定した後またはデータをサーバーから更新した後に呼び出します。
commitNew をオーバーライドして、データベース内の項目を変更します。
commitNew をオーバーライドして、データベースに新しい項目を追加します。
指定した項目がこのビューに属するかどうかを示す値を返します。
調べる項目。
beginUpdate/endUpdate ブロック内で関数を実行します。
この関数が終了するまでコレクションはリフレッシュされません。 deferUpdateメソッドは、update関数が例外を生成した場合でもendUpdate が呼び出されるようにします。
更新なしで実行する関数。
更新の終了時に強制的に更新するかどうか。
指定した項目の編集トランザクションを開始します。
編集する項目。
beginUpdate の呼び出しによって中断された更新を再開します。
更新の終了時に強制的に更新するかどうか。
このコレクション内の項目の集計値を計算します。
計算する集計のタイプ。
集計するプロパティ。
現在のページの項目だけを含めるかどうか。
The aggregate value.
指定したインタフェースがサポートされている場合、trueを返します。
調べるインタフェースの名前。
ODataソースからデータをロードまたは再ロードします。
指定した項目をビューの現在の項目に設定します。
現在の項目として設定する項目。
ビューの最初の項目を現在の項目として設定します。
ビューの最後の項目を現在の項目として設定します。
ビューの現在の項目の後の項目を現在の項目として設定します。
ビューの指定したインデックスにある項目を現在の項目として設定します。
現在の項目として設定する項目のインデックス。
ビューの現在の項目の前の項目を現在の項目として設定します。
最初のページを現在のページとして設定します。
True if the page index was changed successfully.
最後のページを現在のページとして設定します。
True if the page index was changed successfully.
現在のページの後のページに移動します。
True if the page index was changed successfully.
指定したインデックスにあるページに移動します。
移動先ページのインデックス。
True if the page index was changed successfully.
現在のページの前のページに移動します。
True if the page index was changed successfully.
collectionChanged イベントを発生させます。
変更の記述が含まれます。
currentChanged イベントを発生させます。
currentChanging イベントを発生させます。
イベントデータを含むCancelEventArgs 。
error イベントを発生させます。
error イベントを発生させます。 デフォルトでは、エラーによって例外が生成され、データのリフレッシュがトリガされます。 この動作を回避するには、イベントハンドラでRequestErrorEventArgs.cancel パラメータをtrueに設定します。
エラーに関する情報を含むRequestErrorEventArgs 。
pageChanged イベントを発生させます。
pageChanging イベントを発生させます。
イベントデータを含むPageChangingEventArgs 。
requestCanceled イベントを発生させます。
sourceCollectionChanged イベントを発生させます。
sourceCollectionChanging イベントを発生させます。
イベントデータを含むCancelEventArgs 。
現在のソート、フィルタ、およびグループパラメーターを使用してビューを再作成します。
commitNew をオーバーライドして、データベースから項目を削除します。
データベースから削除する項目。
指定したインデックスにある項目をコレクションから削除します。
コレクションから削除する項目のインデックス。このインデックスは、ソースコレクションに対してではなくビューに対する相対インデックスです。
特定のレコードの範囲をビューにロードするため、データウィンドウを設定します。
データウィンドウの最初の項目のインデックス。
データウィンドウの最後の項目のインデックス。
FlexGridFilter などの既知のフィルタプロバイダに基づいてフィルタ定義を更新します。
既知のフィルタプロバイダ。通常はFlexGridFilter のインスタンス。
コレクションが変更されたときに発生します。
現在の項目が変更された後に発生します。
現在の項目が変更される前に発生します。
データの読み込みまたは書き込みエラーがあるときに発生します。
ODataCollectionView がデータのロードを終了するときに発生します。
ODataCollectionView がデータのロードを開始するときに発生します。
ページインデックスが変更された後に発生します。
ページインデックスが変更される前に発生します。
ODataVirtualCollectionViewが保留中のデータ要求をキャンセルするときに発生します。
sourceCollection プロパティの値が変化した後に発生します。
sourceCollection プロパティの値が変化する前に発生します。
ODataCollectionView クラスを拡張して、setWindow メソッドを使用したデータのオンデマンドロードをサポートします。
以下のサンプルコードは、 ODataCollectionView wijmo.grid.FlexGrid コントロールと同期させてグリッドの ビューポートにデータをロードする方法を示します。
ODataVirtualCollectionView クラスは「データウィンドウ」を実装しており、 実際に表示されるデータのみがサーバーからロードされます。 表示されていない項目はコレクションにnull値として追加され、 setWindow メソッドの呼び出しによってロードされないかぎりnull値の ままになります。
このオンデマンドでデータをロードするメソッドは、必要になるまでデータがロードされないため、 大きなデータセットを扱うときに便利です。ただし、制限もいくつかあります。 ソートとフィルタリングはサーバー側で実行する必要があります。グループ化とページングはサポートされていません。
次の例では、 ODataVirtualCollectionView を使用してNorthWind ODataプロバイダサービスからデータをロードしています。 ユーザーがグリッドをスクロールするに伴ってコレクションはデータを要求時にロードします。
Example