|
分類:[C#]
分類:[C#]
環境: WindowsXP SP2、VS2005
データベースを扱うアプリケーションの場合、DataTableにデータを格納することがあります。 DataTableでデータを持つことはADO.NETを使う以上必然といった方がよろしいでしょうか。
このDataTableはDataGridViewにバインドすることができ、かなり便利です。 しかし、こと大量にデータを扱う場合には、DataTableをDataGridViewにバインディングすることはナンセンスだと言わざるえません。
なぜならDataSourceへの割り当てがひじょーに遅いからです(加えてレンダリングも遅いのですが今回は触れません)。 このような場合、VirtualModeを使うようですが、参考文献が少ないのが現状で、とっつきにくいです。
それにしても、DataGirdはぜんぜん問題ないのに拡張版のDataGridViewがこんなへぼでは少々納得できません。
といっても始まらないので、少々気づいたことを述べてみます。 それというのは、IListインターフェースを実装するクラスならばバインディングが非常に高速に行えるということです(DataTableに比べて)。
例えば、行を表すクラス(カラムを表すフィールドを持つ)を作成し、DataRowの中身を一度そのクラスのインスタンスに保存します。全ての行の分、インスタンスを作成し、それらをListに追加します。 そのListをDataGridViewにバインドすればいいわけです。
コーディングは増えるし、間に無駄な処理を挟んでいるにもかかわらず、こちらの方がずいぶん速くにバインドできます。
現在はこの方法で対処していますが、やはりスマートとは言いがたいです。 何か良い方法はないでしょうか。
|