constructor(url: string, tableName: string, options?: any): ODataCollectionView
Initializes a new instance of the ODataCollectionView class.
Url of the OData service (for example 'https://services.odata.org/Northwind/Northwind.svc/').
Name of the table (entity) to retrieve from the service. If not provided, a list of the tables (entities) available is retrieved.
JavaScript object containing initialization data (property values and event handlers) for the ODataCollectionView.
キーが計算フィールドを表し、値が式(関数または文字列)であるオブジェクトを取得または設定します。
計算フィールドにはプロキシが必要になります。 Ie11で使用する場合は、 https://www.npmjs.com/package/proxy-polyfill のようなポリフィルを使用します。
計算フィールドは、外部データを扱う場合に役立ちます。 たとえば、1人当たりの収入フィールド(gnp/pop)または利益フィールド(収益-経費)を追加できます。
計算フィールドは動的です。 計算で使用されるフィールドを変更すると、それらの値は自動的に更新されます。 また、読み取り専用です。 それらの計算に使用されるプロパティの値を変更することはできますが、結果を直接編集することはできません。
FlexGrid cellTemplatesとは異なり、計算フィールドは並べ替え、フィルタリング、およびグループ化に使用できます。 また、チャートやその他のWijmoコントロールで使用することもできます。
計算フィールドは、データ項目を引数または文字列として受け取る関数として定義できます。
以下に例を示します。
```typescript // 通常のデータ項目 interface IDataItem { product: string, brand: string, unitPrice: number, qty: number, shipped: boolean } function getData(): IDataItem[] { return [ { product: 'Banana', brand: 'Chiquita', unitPrice: 45.95, qty: 12, discount: .08, shipped: true }, ... ] } ```
次のように関数ベースの計算フィールドを追加できます。
```typescript // 計算プロパティをIDataItemに追加します interface ICalcDataItem extends IDataItem { fullName: string; allCaps: string; totalPrice: number, tax: number; }
let cv = new CollectionView(getData(), { calculatedFields: { fullName: ($: ICalcDataItem) => [$.brand, $.product].join(' '), allCaps: ($: ICalcDataItem) => $.fullName.toUpperCase(), totalPrice: ($: ICalcDataItem) => ($.unitPrice * $.qty) * (1 - $.discount), tax: ($: ICalcDataItem) => $.totalPrice * 0.12 } }); ``` **関数ベースの計算フィールド** は、次の理由により、通常、文字列ベースの計算フィールドよりも優れています。
1) 設計時のエラーチェックとコマンド補完を提供します。 2) 実行速度が速い 3) コンテンツセキュリティポリシー(CSP)に関する問題はありません。
あるいは、文字列ベースの計算フィールドを追加することもできます。
```typescript let cv = new CollectionView(getData(), { calculatedFields: { fullName: '[$.brand, $.product].join(" ")', allCaps: '$.fullNameStr.toUpperCase()', totalPrice: '($.unitPrice * $.qty) * (1 - $.discount)', tax: '$.totalPrice * 0.12' }); ``` 文字列式は、 項目の元の値と計算された値を含むコンテキスト変数「$」により、現在の項目を参照できます。
**文字列ベースの計算フィールド**には、関数ベースの計算フィールドよりも利点があり、場合によっては重要になることがあります。 いくつかの利点は次のとおりです。
1) 少し簡潔です 2) データとして保存でき、実行時に簡単に変更できます。
このビューがgroupDescriptions プロパティによってグループ化をサポートしているかどうかを示す値を取得します。
データのロード中にデータ型を変換するためのマップとして使用されるJavaScriptオブジェクトを取得または設定します。
The object keys represent the field names and the values are DataType values that indicate how the data should be coerced.
For example, the code below creates an ODataCollectionView and specifies that 'Freight' values, which are stored as strings in the database, should be converted into numbers; and that three date fields should be converted into dates:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; import { DataType } from '@grapecity/wijmo'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const orders = new ODataCollectionView(url, 'Orders', { dataTypes: { Freight: DataType.Number OrderDate: DataType.Date, RequiredDate: DataType.Date, ShippedDate: DataType.Date, } }); ```
This property is useful when the database contains data stored in formats that do not conform to common usage.
In most cases you don't have to provide information about the data types, because the inferDataTypes property handles the conversion of Date values automatically.
If you do provide explicit type information, the inferDataTypes property is not applied. Because of this, any data type information that is provided should be complete, including all fields of type Date.
Gets or sets a value that causes the ODataCollectionView to defer commits back to the database.
The default value for this property is **false**, which causes any changes to the data to be immediately committed to the database.
If you set this property to **true**, it will automatically set the trackChanges property to true. After this, any changes to the data (including edits, additions, and removals) will be tracked but not committed to the database until you call the commitChanges method to commit the changes, or the cancelChanges method to discard all pending changes.
For example: ```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata';
// create data source let url = 'https://services.odata.org/...'; let view = new ODataCollectionView(url, 'Categories', { keys: [ 'ID' ] });
// defer commits view.deferCommits = true;
// handle commit/cancel changes buttons let btnCommit = document.getElementById('btn-commit') as HTMLButtonElement, btnCancel = document.getElementById('btn-cancel') as HTMLButtonElement; btnCommit.addEventListener('click', () => view.commitChanges()); btnCancel.addEventListener('click', () => view.cancelChanges()); view.hasPendingChangesChanged.addHandler((s, e) => { btnCommit.disabled = btnCancel.disabled = !view.hasPendingChanges; }); ```
Gets or sets a string that represents the entity's data type on the server.
This may be required to update data in some OData services.
For more details, please see http://docs.oasis-open.org/odata/odata-json-format/v4.0/cs01/odata-json-format-v4.0-cs01.html#_Toc365464687.
関連エンティティを返すデータに含めるかどうかを指定する文字列を取得または設定します。
このプロパティは直接ODataの$expandオプションにマップされます。
For example, the code below retrieves all the customers and their orders from the database. Each customer entity has an "Orders" field that contains an array of order objects:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const customersOrders = new ODataCollectionView(url, 'Customers', { expand: 'Orders' }); ```
データソースから取得するフィールドの名前を含む配列を取得または設定します。
このプロパティがnullまたは空の配列に設定されている場合は、すべてのフィールドが 取得されます。
For example, the code below creates an ODataCollectionView that gets only three fields from the 'Categories' table in the database:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const categories = new ODataCollectionView(url, 'Categories', { fields: ['CategoryID', 'CategoryName', 'Description'] }); ```
項目がビューに含める対象として適しているかどうかを判断するために使用されるコールバックを取得または設定します。
このコールバックがtrueを返した場合、パラメーターとして渡された項目はビューに含まれます。
このプロパティのデフォルト値は**null**,です。これは、データがフィルタリングされないことを意味します。
サーバーでデータをフィルタ処理するために使用されるODataフィルタ仕様を含む文字列を取得または設定します。
The filter definition syntax is described in the OData documentation.
For example, the code below causes the server to return records where the 'CompanyName' field starts with 'A' and ends with 'S':
```typescript view.filterDefinition = "startswith(CompanyName, 'A') and endswith(CompanyName, 'B')"; ```
Filter definitions can be generated automatically. For example, the FlexGridFilter component detects whether its data source is an ODataCollectionView and automatically updates both the filter and filterDefinition properties.
Note that the filterDefinition property is applied even if the filterOnServer property is set to false. This allows you to apply server and client filters to the same collection, which can be useful in many scenarios.
For example, the code below uses the filterDefinition property to filter on the server and the filter property to further filter on the client. The collection will show items with names that start with 'C' and have unit prices greater than 20:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const data = new ODataCollectionView(url, 'Products', { oDataVersion: 4, filterDefinition: 'startswith(ProductName, \'C\')', // server filter filterOnServer: false, // client filter filter: function(product) { return product.UnitPrice > 20; }, }); ```
フィルタリングがサーバー側とクライアント側のどちらで実行されるかを決定する値を取得または設定します。
Use the filter property to perform filtering on the client, and use the filterDefinition property to perform filtering on the server.
In some cases it may be desirable to apply independent filters on the client **and** on the server.
You can achieve this by setting (1) the filterOnServer property to false and the filter property to a filter function (to enable client-side filtering) and (2) the filterDefinition property to a filter string (to enable server-side filtering).
このプロパティのデフォルト値は**true**です。
このCollectionView でフィルターとして使用されるIPredicate 関数の配列を取得します。
項目の特定のプロパティに検証エラーが含まれているかどうかを判定するコールバックを取得または設定します。
メソッドは、データ項目をパラメータとして、検証されるプロパティ、およびタが既に解析されてデータ項目に適用されているかどうか(parsing == false)またはザーが値を編集しようとして予期されたデータ型に解析できない値を入力したかどうかを記述する解析パラメータ(parsing == true)を受け取ります。
このメソッドは、エラーメッセージを含む文字列を返します。エラーが検出されなかった場合はnullを返します。
次に例を示します。
```typescript view = new CollectionView(data, { getError: (item: any, prop: string, parsing: boolean) => {
// 解析に失敗しました」メッセージを表示します。 if (parsing) { if (prop == 'date') { return 'Please enter a valid date in the format "MM/dd/yyyy"'; } else if (prop == 'id') { return 'Please enter a positive number'; } }
// 保存(解析)されたデータが有効であることを確認します。 if (prop == 'date' && item.date < minDate) { return 'Please enter a date after ' + Globalize.formatDate(minDate, 'd'); } else if (prop == 'id' && item.id < 0) { return 'Please enter a positive number'; } } }); ```</>>
コレクションの項目をビューでどのようにグループ化するかを記述するGroupDescription オブジェクトのコレクションを取得します。
最上位レベルのグループを表すCollectionViewGroup オブジェクトの配列を取得します。
Gets a value that determines whether the ODataCollectionView has pending changes.
See also the deferCommits property and the commitChanges and cancelChanges methods.
標準の日付表現のような文字列を含むフィールドを 自動的に日付に変換するかどうかを決定する値を取得または設定します。
This property is set to true by default, because the ODataCollectionView class uses JSON and that format does not support Date objects.
This property has no effect if specific type information is provided using the dataTypes property.
Gets a value that indicates the ODataCollectionView is currently loading data.
このプロパティを使用して、進捗状況インジケータを提供できます。
trackChanges が有効化されてから、コレクションに追加されたレコードを含むObservableArray を取得します。
trackChanges が有効化されてから、コレクションで編集されたレコードを含むObservableArray を取得します。
trackChanges が有効化されてから、コレクションから削除されたレコードを含むObservableArray を取得します。
サーバーから返されるJSON値を解析するときに使用するカスタムのreviver関数を取得または設定します。
提供されている場合、関数は2つのパラメータ(キーおよび値)があり、解析された値(元の値と同じ値の場合があります)を返さなければなりません。
For details about reviver functions, please refer to the documentation for the JSON.parse method.
コレクションの新しい項目を作成する関数を取得または設定します。
作成関数が提供されない場合、CollectionView は、適切な型の項目を初期化せずに作成しようとします。
作成関数が提供される場合、その関数は、パラメータを受け取らず、コレクションに対して適切な型のオブジェクトを初期化して返す 必要があります。
サーバーによって使用されるODataのバージョンを取得または設定します。
There are currently four versions of OData services, 1.0 through 4.0. Version 4.0 is used by the latest services, but there are many legacy services still in operation.
If you know what version of OData your service implements, set the oDataVersion property to the appropriate value (1 through 4) when creating the ODataCollectionView (see example below).
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; let url = 'https://services.odata.org/Northwind/Northwind.svc/'; let categories = new ODataCollectionView(url, 'Categories', { oDataVersion: 1.0, // legacy OData source fields: ['CategoryID', 'CategoryName', 'Description'], sortOnServer: false }); ```
If you do not know what version of OData your service implements (perhaps you are writing an OData explorer application), then do not specify the version. In this case, the ODataCollectionView will get this information from the server. This operation requires an extra request, but only once per service URL, so the overhead is small.
ページングをサーバーで実行するか、クライアントで実行するかを決定する 値を取得または設定します。
Use the pageSize property to enable paging.
このプロパティのデフォルト値は**true**です。
CollectionView が、アイテムの編集後に結果(ソート、フィルター、およびグループ化を適用する)を自動的に更新するかどうかを決定する値を取得または設定します。
このプロパティはデフォルトで **true** に設定されます。これにより、 編集が完了した後にコレクションが常に正しくソート、フィルタリング、およびグループ化されるようにします。
false に設定する場合、アイテムの編集時に更新を遅延されます。 この場合、ソート、フィルタリング、およびグループ化の基準が変更されるか、 またはExcelと同様にrefresh メソッドが呼び出されるまで、コレクションは更新されません。
データを送信または要求するときに使用する要求ヘッダーを含むオブジェクトを取得または設定します。
このプロパティは、認証が必要なシナリオでよく使用されます。例:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const 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 プロパティの一般的な使用方法を示します。
```typescript import { CollectionView, isString } from '@grapecity/wijmo';
// カスタムソート比較子を使用してCollectionViewを作成します const view = new CollectionView(data, { sortComparer: (a: any, b: any) => { return isString(a) && isString(b) ? alphanum(a, b) // use custom comparer for strings : null; // use default comparer for everything else } }); ```
次の例は、 Intl.Collator を使用してソート順を制御する方法を示しています。
```typescript import { CollectionView, isString } from '@grapecity/wijmo';
// Intl.Collatorを使用してソートするCollectionViewを作成します const collator = window.Intl ? new Intl.Collator() : null; let view = new CollectionView(data, { sortComparer: (a, b) => { return isString(a) && isString(b) && collator ? collator.compare(a, b) // 文字列に使用するカスタム比較子 : null; // 文字列以外にはデフォルトの比較子を使用します } }); ```
ソート時の値の変換に使用される関数を取得または設定します。
この関数は、SortDescription、データ項目、および変換する値をパラメーターとして受け取り、変換後の値を返す必要があります。
たとえば、FlexGrid コントロールはこのプロパティを使用して、マップされた列を生の値ではなく表示値を基準にソートします。
以下のサンプルコードでは、CollectionViewが国コードの整数を含む'country'プロパティをソートするときに、 対応する国名を使用してソートされるようにします。
```typescript const countries = 'US,Germany,UK,Japan,Italy,Greece'.split(','); view.sortConverter = (sd: SortDescription, item: any, value: any) => { return sd.property === 'countryMapped' ? countries[value]; // 国IDを名前に変換します。 : value; } ```
次の例では、2つの値を組み合わせています。 この場合、国でソートすると、ビューが都市ごとに分割されます。
```typescript view.sortConverter: (sd: SortDescription, item: any, value: any) => { if (sd.property == 'country') { value = item.country + '\t' + item.city; } return value; } ```
コレクションの項目をビューでどのようにソートするかを記述するSortDescription オブジェクトの配列を取得します。
null値のソート方法を決定する値を取得または設定します。
このプロパティはデフォルトで**SortNulls.Last**に設定されます。これにより、コレクションをソートするとNULL値が最後に表示されます。 この動作はExcelと同じです。
ソート操作がサーバー側とクライアント側のどちらで実行されるかを決定する値を取得または設定します。
Use the sortDescriptions property to specify how the data should be sorted.
このプロパティのデフォルト値は**true**です。
コントロールがデータの変更を追跡するかどうかを決定する値を取得または設定します。
このプロパティのデフォルト値は**false**に設定されているため、CollectionViewはどのデータ項目が変更されたかを追跡しません。
このプロパティが**true**に設定されている場合、CollectionView は、データの変更を追跡し、itemsAdded、itemsRemoved、 itemsEdited の 各コレクションを介して変更を公開します。
変更の追跡は、変更が有効であることをユーザーが確認した後にサーバーを更新する必要がある場合に役立ちます。
変更をコミットまたはキャンセルしたら、clearChanges メソッドを使用して、 itemsAdded、itemsRemoved、itemsEdited の各コレクションをクリアします。
CollectionView は、適切なCollectionView メソッド(editItem /commitEdit、 addNew /commitNew、remove)を使用して行われた変更だけを追跡します。データに直接行われた変更は追跡されません。
安定したソートアルゴリズムを使用するかどうかを取得または設定します。
安定したソートアルゴリズムは、同じキーを持つレコード間の相対的な順序を維持します。 たとえば、「Amount」フィールドを持つオブジェクトのコレクションを考えてみます。 このコレクションを「Amount」でソートする場合、安定したソートでは、 Amount値が同じレコード間で元の順序が保たれます。
このプロパティのデフォルトは false です。この場合は、 高速だが安定ではないJavaScriptの組み込みソートメソッドが CollectionView で使用されます。
Chromeはバージョン70以降、Firefoxバージョン3以降は安定したソートを提供します。 ES2019の場合 、ソートは安定している**必要があります**。 ES2018までのECMAScript第1版では、不安定になることが許可されていました。
useStableSortプロパティをtrueに設定すると、すべてのブラウザー(IE11も含む)で安定したソートが保証されますが、ソートにかかる時間が30%〜50%増加します。
addNew(item?: T, commit?: boolean): T
コレクションに新しい項目を追加します。
このメソッドをパラメータなしで呼び出すと、新しい項目が作成されてコレクションに追加され、 commitNewメソッドで新しい項目がコミットされるか、 cancelNewメソッドでキャンセルされるまで、リフレッシュ操作が保留されます。
次のコードは、addNew メソッドの典型的な使用方法を示します。
```typescript // 新しい項目を作成し、それをコレクションに追加します var newItem = view.addNew();
// 新しい項目を初期化します newItem.id = getFreshId(); newItem.name = 'New Customer';
// ビューをリフレッシュできるように新しい項目をコミットします view.commitNew(); ```
新しい項目をsourceCollection にプッシュしてから、refresh メソッドを呼び出すことで、 新しい項目を追加することもできます。addNew では、 ユーザーが追加操作をキャンセルできるため、ユーザー対話式のシナリオ(データグリッドに新しい項目の追加するなど)で特に便利です。 また、追加操作がコミットされるまで、新しい項目がソートされたり、 フィルタ処理でビューから除外されないようにします。
コレクションに calculatedFields がない限り、新しい項目はデフォルトで空のオブジェクトです。 この場合、新しい項目のプロパティは、データ型に応じた値に設定されます(文字列型プロパティの場合は空の文字列、数値型プロパティの場合はゼロ、その他のデータ型の場合はnull)。
多くの場合、計算フィールドは文字列がnullでないことに依存する式に依存するため、 この動作は便利です。ただし、newItemCreatorプロパティを、 新しい項目を作成して初期化する関数に設定することで、 この動作をカスタマイズできます。
Item to be added to the collection (optional).
Whether to commit the new item immediately.
cancelChanges(): void
Cancels all changes by removing all items in the itemsAdded, itemsRemoved, and itemsEdited collections, without committing them to the server.
This method is used with the deferCommits property.
clearChanges(): void
itemsAdded 、itemsRemoved 、itemsEdited の各コレクションの全項目をクリアすることによってすべての変更をクリアします。
このメソッドは、変更をサーバーに確定した後またはデータをサーバーから更新した後に呼び出します。
commitChanges(committed?: (xhr: XMLHttpRequest)): void
Commits all pending changes to the server.
Changes are contained in the itemsEdited, itemsAdded, and itemsRemoved collections, and are automatically cleared after they are committed.
See also the deferCommits property.
Optional callback invoked when the commit operation has been completed. The callback takes an **XMLHttpRequest** parameter contains information about the request results.
contains(item: T): boolean
指定した項目がこのビューに属するかどうかを示す値を返します。
Item to seek.
deferUpdate(fn: Function, force?: boolean): void
beginUpdate/endUpdateブロック内で関数を実行します。
この関数が完了するまでコレクションは更新されません。
deferUpdateメソッドは、update関数が例外を生成した場合でもendUpdate が呼び出されるようにします。
Function to be executed without updates.
Whether to force a refresh when ending the update.
editItem(item: T): void
指定した項目の編集トランザクションを開始します。
Item to be edited.
endUpdate(force?: boolean): void
beginUpdate の呼び出しによって中断された更新を再開します。
Whether to force a refresh when ending the update.
getAggregate(aggType: Aggregate, binding: string, currentPage?: boolean): void
このコレクション内の項目の集計値を計算します。
Type of aggregate to calculate.
Property to aggregate on.
Whether to include only items on the current page.
implementsInterface(interfaceName: string): boolean
Returns true if this object supports a given interface.
Name of the interface to look for.
load(): void
ODataソースからデータをロードまたは再ロードします。
moveCurrentTo(item: T): boolean
指定した項目をビューの現在の項目に設定します。
Item that will become current.
moveCurrentToFirst(): boolean
ビューの最初の項目を現在の項目として設定します。
moveCurrentToLast(): boolean
ビューの最後の項目を現在の項目として設定します。
moveCurrentToNext(): boolean
ビューの現在の項目の後の項目を現在の項目として設定します。
moveCurrentToPosition(index: number): boolean
ビューの指定したインデックスにある項目を現在の項目として設定します。
Index of the item that will become current.
moveCurrentToPrevious(): boolean
ビューの現在の項目の前の項目を現在の項目として設定します。
moveToPage(index: number): boolean
指定したインデックスにあるページに移動します。
Index of the page to move to.
onCollectionChanged(e?: NotifyCollectionChangedEventArgs): void
collectionChanged イベントを発生させます。
Contains a description of the change.
onCurrentChanged(e?: EventArgs): void
currentChangedイベントを発生させます。
onCurrentChanging(e: CancelEventArgs): boolean
currentChangingイベントを発生させます。
CancelEventArgs that contains the event data.
onError(e: RequestErrorEventArgs): boolean
Raises the error event.
By default, errors throw exceptions and trigger a data refresh. If you want to prevent this behavior, set the cancel parameter to true in the event handler.
RequestErrorEventArgs that contains information about the error.
onHasPendingChangesChanged(e?: EventArgs): void
Raises the hasPendingChangesChanged event.
onLoaded(e?: EventArgs): void
Raises the loaded event.
onLoading(e?: EventArgs): void
Raises the loading event.
onPageChanged(e?: EventArgs): void
pageChangedイベントを発生させます。
onPageChanging(e: PageChangingEventArgs): boolean
pageChangingイベントを発生させます。
PageChangingEventArgs that contains the event data.
onSourceCollectionChanged(e?: EventArgs): void
sourceCollectionChangedイベントを発生させます。
onSourceCollectionChanging(e: CancelEventArgs): boolean
sourceCollectionChangingイベントを発生させます。
CancelEventArgs that contains the event data.
remove(item: any): void
Override remove to remove the item from the database.
Item to be removed from the database.
removeAt(index: number): void
指定したインデックスにある項目をコレクションから削除します。
Index of the item to be removed from the collection. The index is relative to the view, not to the source collection.
updateFilterDefinition(filterProvider: any): void
Updates the filter definition based on a known filter provider such as the FlexGridFilter.
Known filter provider, typically an instance of a FlexGridFilter.
Occurs when the value of the hasPendingChanges property changes.
See also the deferCommits property.
sourceCollection プロパティの値が変化する前に発生します。
Extends the CollectionView class to support loading and saving data from OData sources.
You can use the ODataCollectionView class to load data from OData services and use it as a data source for Wijmo controls.
In addition to full CRUD support you get all the CollectionView features including sorting, filtering, paging, and grouping. The sorting, filtering, and paging functions may be performed on the server or on the client.
The code below shows how you can instantiate an ODataCollectionView that selects some fields from the data source and provides sorting on the client. Notice how the 'options' parameter is used to pass in initialization data, which is the same approach used when initializing controls:
```typescript import { ODataCollectionView } from '@grapecity/wijmo.odata'; const url = 'http://services.odata.org/V4/Northwind/Northwind.svc/'; const categories = new ODataCollectionView(url, 'Categories', { fields: ['CategoryID', 'CategoryName', 'Description'], sortOnServer: false }); ```
The example below uses an ODataCollectionView to load data from a NorthWind OData provider service, and shows the result in a FlexGrid control:
{@sample Grid/Data-binding/ODataAPI/purejs Example}