Seasons.NET

ちょっとした技術ブログです

DataGridView

f:id:Seasons:20060726013631j:image
一度作ったツールは、カスタムコントロールでコンボボックスや
テキストボックスを配置したものを動的に作成するものを作って
やっていたが、描画が糞重いので、なにかいい方法はないかと思って
さがしていたら、DataGridViewを見つけた。
これは、リストビューにボタンやコンボボックス、イメージなど
色々配置できるもので、基本は、一つのコントロールだから、
要素が増えていくだけなので、対して重くない。
これなら!!
ってことで使ってみたが、様々なコレクションで管理するため
意外とはまった・・・
コンボボックスのセルなんだけど、DataGridViewComboboxColumnだったりして、
プロパティで返すのがComoboboxじゃなかったり・・・って当たり前か・・・
( コントロールが根本的に違うしね。。。 )

あと、基本デフォルトで要素が1つ追加された状態で
始まるので、何も追加してないのに、Count = 1で返ってくるのが
気になってしょうがない。。。

foreach でイテレータで要素分回しても、
結局は、+1多いわけで、なんか納得いかず、-1してCount返す
プロパティを作ったわけ。

これどうやったら要素なしからはじまるんや???


ちなみに上記内容のコードは、こんな感じ

−1しても、必ずセルが1つ入っているので、0以上が保証されるため、エラーは、考慮してない。

1 public Int32 RowCount
2 {
3     get{
4         return DataGridView.Rows.Count-1;
5     }
6 }

また、コンボボックスのセルの内容は、CellsのValueを見ればOKだが
インデックスで知りたいのになぜかプロパティがなかったので、
こんなメンバ関数を作って対応した。。。

ていうかあるのかも・・・

 1 public Int32 GetComboBoxIndex(string _findString)
 2 {
 3     Int32 idx = 0;
 4     //
 5     // DataGridView.Combobox.Itemsには、初期化時に
 6     // AddRangeで string[]のリストを登録しておくことが必要 
 7     //
 8     foreach( string cell in DataGridView.Combobox.Items )
 9     {
10         if( cell.CompareTo( _findString ) == 0 )
11         {
12             break;
13         }
14         idx++;
15     }
16     return idx;
17 }