2004年09月21日

DataGrid の DataSourceプロパティ

   このエントリーをはてなブックマークに追加 Clip to Evernote
WebForms と WinForms の DataGrid コントロールの DataSource に指定できるものが違うのは困りものです。WebForms でできるのだから、 WinForm でも出来るだろうと、DataReader のインスタンスを渡してあげたのですが、コンパイルは通るのに、実行時にエラーになってしまいました。
DataSourceプロパティは object 型なのでコンパイルエラーが出ないのは、仕方ないとして、受け取るインターフェースが、Webでは、 System.Collections.IEnumerable インターフェイス なのに対し、WinFromsでは、IListSource インターフェイスあるいは、IList インターフェースとなっています。

なぜ、なんでしょうか。深い意味があるのでしょうか。それとも .NET Frameworkのインターフェース全体を統括する設計者が、そこまで目がまわらなかったのでしょうか。
まあ、あれだけ大きなフレームワークですから、目が回らなかったとしても仕方ないかもしれませんが、使う側としては、些細な違いで悩むことになるので、統一してほしいですね。


この記事へのコメント
とおりすがりです。

Webでは上から順に表示すればいいだけなので、順序列挙が可能なIEnumerableだけでもなんとか間に合いそうです。
Formでは並び替え、セル、カラムの選択などをその場で行わなければいけないので、インデックスが付いていないといけないと。

統一、という意味では両方IListでも良かったんでしょうが、WEBの方はより低位なクラスで済むのですから、IListを採るのは無意味です。
特にWEBなのですから、データソースへの接続のコストが高くつくような環境での使用も考えて、IListを選ばずIEnumerableにしたんだと思います。

WindowsFormの場合、セル間の移動などの処理の際に要素にインデックスを付ける必要が生じます。どうせ付けるのでしたら、初めからインデックスの付いているIListを選ぶのは当然です。WindowsFormの場合、ローカルリソースが十分に使えるはずですので、この場合、データソースへの接続のコストが如何に高かろうと、IListに容れてしまえば関係ありません。つまり、IEnumerableの場合はIListに容れなおして使えと、そういうことなんではないでしょうか?
Posted by れい at 2004年11月10日 21:56
コメントありがとうございます。
なるほど、そういうことなのですね。納得です。
ライブラリ作成者の立場になって考えてみると、確かに「れい」さんの言うことが良く理解できます。
---
今、自分の文章を読み直して「目が回らない」という表現で思わず吹きだしてしまいました。「手が回らない」と「目が行き届かない」が混同してしまったようです(笑)
Posted by gushwell at 2004年11月11日 20:41
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/7070703