WebControlを拡張するカスタムコントロールを作成しています。このWebコントロールを使用すると、コンシューマーは次のようにマークアップで列のコレクションを定義できます。
<Custom:CustomGrid>
<Columns>
<Custom:DataColumn HeaderText="FirstName" />
<Custom:DataColumn HeaderText="LastName" />
</Columns>
IEnumerableをDataSourceプロパティに配置すると、これがテーブルにレンダリングされます。このコントロールでは、ページングも可能です。DataSourceのIEnumerableは完全なリストであり、一度にリストのページを表示します。現在のページ、ページあたりの行数などをviewstateに保存しています。また、完全なリストをビューステートに入れる必要がありますか?多分セッション?このリストは少し重くなる可能性があります。たぶん、ビューステートに保存されているランダムキーを使用してセッションで保存しますか?ここでのベストプラクティスは何ですか?
編集: IEnumerableのすべての型をシリアライズ可能にすることを強制するのは正しいとは思いません。それは公平ですか?では、シリアル化のためにデータソースを他のデータ構造にコピーする必要がありますか?
編集2: RenderChildControlsを実装する代わりに基本コントロールを使用する場合でも、CreateChildControlsを実装する必要がありますが、データをどこかに永続化する必要がありますか、それとも基本クラスのポイントを逃しましたか?