RadGrid.DataSource
ポストバックでLinqクエリに割り当てた後DataSource
はnullです。すべてのフィルターと並べ替えが適用された後、RadGridがグリッドに入力するために使用するデータを取得することは可能ですか?
編集
データを取得するために使用できる唯一のメソッドは、内部としてマークされています。今はあきらめるつもりだと思います。後で解決策が見つかった場合は、ここに回答を投稿します。
RadGrid.DataSource
ポストバックでLinqクエリに割り当てた後DataSource
はnullです。すべてのフィルターと並べ替えが適用された後、RadGridがグリッドに入力するために使用するデータを取得することは可能ですか?
データを取得するために使用できる唯一のメソッドは、内部としてマークされています。今はあきらめるつもりだと思います。後で解決策が見つかった場合は、ここに回答を投稿します。
これはtelerikのことではありません。すべてのコントロールで、すべてのポストバックで明示的に再割り当てして再バインドしない限り、DataSourceプロパティは常にnullになります。
SessionまたはCacheを使用することも、 ViewStateをあえぎながらデータソースを維持することもできますが、それはお勧めしません。理想的には、並べ替えやページングなどのグリッド上で実行するアクションは、その情報のためにデータベースへの別のトリップをもたらすはずです。
編集:この
種の情報をセッションまたはキャッシュに
保存しない理由は、情報が大きく、ユーザーごとにあるためです。サーバーに無制限のメモリがある場合は、必ずデータセットをユーザーごとの場所全体にセッションとキャッシュに保存しますが、ほとんどの場合、ユーザーごとのメモリフットプリントを小さく保ちます。
この情報をViewStateに保存すると、行のごく一部しか顧客に表示されないため、ほとんど無駄になりますが、肥大化したViewStateを介して大量のダウンロードを顧客に提供します。
最終的には、実際にユーザーに表示する行のみを取得するように、データアクセスレベルでページング、並べ替え、およびフィルタリングを処理するように注意する必要があります。
TelerikのコントロールにはNeedDataSourceイベントハンドラーがあります。そこにデータソースを設定します。
protected void radGridVesselSpecs_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
{
if (this.Vessel == null)
return;
this.radGridVesselSpecs.DataSource = this.Vessel.Specifications;
}
2つの選択肢があります。1つはデータソースオブジェクトをセッションに保存するためのものです。または、任意のDataSourceコントロールを使用して、ポストバック中に再バインドすることもできます。