このトピックでは、クライアントベースとサーバーベースの非バインド列の統合とそれぞれの最適化について説明します。また、統合が行われる場合に開発者がプログラム的に制御する方法を示します。
このトピックを理解するために、以下のトピックを参照することをお勧めします。
非バインド列の概要: このトピックでは、igGrid
の非バインド列機能の概要について説明します。
列を非バインドとして設定: このトピックでは、クライアント側およびサーバー側で igGrid
に非バインド列を設定する方法を示します。これには、JavaScript と ASP.NET のコード スニペットが含まれます。
非バインド列をローカルに生成 (igGrid): このトピックでは、クライアント上で非バインド列の値を設定する方法をコード例を用いて示します。
非バインド列をリモートに生成 (igGrid): このトピックでは、サーバー上で非バインド列の値を設定する方法をコード例を用いて示します。
このトピックは、以下のセクションで構成されます。
MVC シナリオでは、マージ操作が行われる場所を選択できます。オプションは、クライアント上またはサーバー上です。
ビューでは、この構成は Grid<T>.MergeUnboundColumns(bool mergeUnboundColumns)
メソッドで制御されます。
コントローラーでは、この構成は GridModel.MergeUnboundColumns
ブール値プロパティで制御されます。
MergeUnboundColumns
オプションは、Ignite UI for MVC Grid 使用時の MVC シナリオでのみ意味をなします。クライアント上では、開発者が明示的にこのオプションを設定することはできません。
MergeUnboundColumns
のデフォルト値は False です。
注:
igHieararchicalGrid
では、プロパティは各ColumnLayout
に設定しなければなりません。
これがデフォルト構成です。
MergeUnboundColumns
オプションの設定に失敗するか、明示的に False に設定すると、非バインド列はクライアント上でマージされます。これは、JSON 応答の非バインド列ではデータは応答 Metadata の一部として送られ、グリッド データとは別であるという意味です。
以下のコード スニペットは、Ignite UI for MVC Grid により生成される igGrid
初期化コードを示します。データ ソース Metadata
プロパティには、DomainName
非バインド列データを含む unboundValues
プロパティがあることが分かります。mergeUnboundColumns = false
は、igGrid
にデータ ソースのメタデータ内に非バインド列データを探すよう指示しています。
JavaScript の場合:
$.ig.loader('igGrid', function() {
$('#grid1').igGrid({
dataSource: {
"Records":[
{"FirstName":"Nancy","LastName":"Davolio"},
{"FirstName":"Andrew","LastName":"Fuller"},
{"FirstName":"Janet","LastName":"Leverling"}
],
"TotalRecordsCount":0,
"Metadata":{
"timezoneOffset":7200000,
"unboundValues":
{
"DomainName":[
"examplenancyd","exampleandrewf","examplejanetl"
]
}
}
},
columns: [
{ key: 'FirstName', dataType: 'string', headerText: 'First Name' },
{ key: 'LastName', dataType: 'string', headerText: 'Last Name' },
{ unbound: true, key: 'DomainName', headerText: 'DomainName', dataType: 'string' }
],
dataSourceType: 'json',
autoGenerateColumns: false,
autoGenerateLayouts: false,
mergeUnboundColumns: false,
responseDataKey: 'Records',
generateCompactJSONResponse: false,
enableUTCDates: true,
localSchemaTransform: true
});
});
MergeUnboundColumns
オプションのデフォルト値は False であり、サーバーから重い負荷を取り除き、より多くのクライアント要求を処理できるようにします。
クライアント側でマージする場合、オリジナルのデータ ソースが過剰に大きいとパフォーマンスがヒットすることになります。これは、データ全体がトラバースされ、新しい非バインド値が追加されるためです (またはリスト値が少ない場合はデフォルトの null 値)。
大規模データ ソース シナリオでは、ページングの使用をお勧めします。これにより、マージされるレコードの数が少なくなります。
MergeUnboundColumns = true
を実行すると、サーバー上でマージが起こります。結果として、典型的なレコード セットとしてデータはクライアントに送られます (応答の中で非バインド列用のメタデータはありません)。クライアント上の mergeUnboundColumn
プロパティは true に設定され、igGrid
はデータにタッチしません。クライアント上の列構成では、unbound
プロパティは Grid MVC ラッパーによって false に設定され、そのため igGrid
は列をバインドとして参照します。この場合、もう 1 つのプロパティ (インターナルとみなされ API マニュアルには記載されません) が列定義の一部として送られます。名前は unboundDS
であり、igGrid
で非バインド列を探すために使用可能で未サポート機能を無効にします。
以下のコードは、Ignite UI for MVC Grid から生成された igGrid
クライアント側コードを示します。キーDomainName
を持つ列はバインドされませんが、データはデータ ソースの一部です。この場合、その unbound
プロパティは false に設定され、mergeUnboundColumns
は true に設定されます。列プロパティの unboundDS
は true (Ignite UI for MVC Grid により) に設定され、列はバインドされないことが示されます。
JavaScript の場合:
$.ig.loader('igGrid', function() {
$('#grid1').igGrid({
dataSource: {
"Records":[
{"FirstName":"Nancy","LastName":"Davolio","DomainName":"examplenancyd"},
{"FirstName":"Andrew","LastName":"Fuller","DomainName":"exampleandrewf"},
{"FirstName":"Janet","LastName":"Leverling","DomainName":"examplejanetl"}
],
"TotalRecordsCount":0,
"Metadata":{"timezoneOffset":7200000}
},
dataSourceType: 'json',
autoGenerateColumns: false,
autoGenerateLayouts: false,
mergeUnboundColumns: true,
responseDataKey: 'Records',
generateCompactJSONResponse: false,
enableUTCDates: true,
columns: [
{ key: 'FirstName', dataType: 'string', headerText: 'First Name' },
{ key: 'LastName', dataType: 'string', headerText: 'Last Name' },
{
unbound: false,
key: 'DomainName',
headerText: 'DomainName',
dataType: 'string',
unboundDS: true
}
],
localSchemaTransform: true
});
});
サーバー側でマージする場合、オリジナルのデータ ソースが過剰に大きいとパフォーマンスヒットの原因となる場合があります。これは、データ全体がトラバースされ、新しい非バインド値が追加されるためです (またはリスト値が少ない場合はデフォルトの null 値)。お分かりのように、サーバーは通常、より危険な位置にあるもので、複数のクライアントで複数回実行しなければならないと大規模なデータ操作は非常に深刻な問題になります。
MergeUnboundColumns = true
のときに SetUnboundValues
メソッドのいずれかを使用して非バインド メソッド値の設定に失敗すると、全体的なデータ ソースをトラバースし、すべての値を非バインド列のデフォルト値 (null 値) に戻します。
List<object>
を第 2 パラメータとして承諾するオーバーロードに比べ、ビューには Grid<T>.SetUnboundValues(string key, Dictionary<object, object> values)
を、コントローラーには GridModel.SetUnboundValues(string key, Dictionary<object, object> values)
をパフォーマンス ゲインとして使用することを強くお勧めします。
大規模データ ソース シナリオではページングの使用をお勧めします。マージはページングの後で実行され、そのためマージするレコード数が少なくなるためです。
注: 異なるデータ ソースからデータのマージを処理する最善の方法は、データ ソースからデータを結合するモデルを作成し、グリッドのモデルとして使用することです。これにより、すべてのリポート機能がサポートされます。
以下のトピックでは、このトピックに関連する追加情報を提供しています。
igGrid
非バインド列機能の既知問題と制限事項について説明します。オンラインで表示: GitHub