DataGridView
一度作ったツールは、カスタムコントロールでコンボボックスや
テキストボックスを配置したものを動的に作成するものを作って
やっていたが、描画が糞重いので、なにかいい方法はないかと思って
さがしていたら、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 }