この前のオフラインセミナーでページングサポートのところまで話が進まなかったので、
洋書を読みながら理解を進めてみた。
DataSource そのものは DataSourceView を返して終わりなので、ページングに関しては、DataSourceView(データ供給元) と DataBoundControl(表示する奴)のやりとりになる。 で、とりあえず更新のことは考えないことにすると、DataSourceView に対しては Select(...) を呼び出してデータ取り出しの「開始を指示する」。 このメソッドは非同期であり、完了時に呼ばれるコールバックメソッドを渡す。このコールバックメソッドのDataBoundControl側が PerformDataBinding。
DataSourceView の Select 第一引数は DataSourceSelectArguments であるが、この引数の中身はIN/OUTの両方の役割を持っている。 (このIN/OUT両方だったところを知るまでが大変だった) IEnumerable を返すのが DataSource/DataSourceView の当初の目的ではあるが、それ以外に付随する情報、すなわち件数を返す経路は、 DataSOurceSelectArguments の TotalCount プロパティで、このプロパティを PerformDataBinding が呼ばれる時点までにDataSourceViewが設定する、という仕掛け。
IN側として DataSourceSelectArguments に指定するものは、ソート順と取得したいレコードの範囲(n件目からm件目)だ。
型付けされた GridView みたいな奴の作り方がやっとわかってきた。