まとまりのないブログ

something which something is something

vb.net

datagridviewのcellselectの挙動

投稿日:

monthcalendarコントロールの表示が環境によって大幅に変わるため、datagridviewでカレンダーを自作したときにcellselectの挙動がどうもおかしかったのでメモ。datagridviewのプロパティでmultiselectをtrueにしてselectmodeをcellselectにすると、datagridviewのセル単位で選択をすることができるようになる。選択したセルはselecedcellsプロパティを参照すると値を取得することができるが、マウスでdatagridviewのセルを選択する方向によってインデックスの並びが異なることに気づいた。

cal_image1.png右の画像は、datagridviewで自作したカレンダーを模したもの。たとえばこのdatagridviewのセルを選択するとき、マウスの選択する操作が左上を基点に右、下、へと動いてセルを範囲選択したという場合。この場合だと、selectedcellsのインデックス0の値は26になる。そしてインデックスの最後の値は9ということになる。

cal_image2.png次に、セルを選択するときの基点が右下で、マウスを左、上、という風に動かしてセルをを範囲選択した場合。この場合だと、selectedcells(0).valueの値は12になる。インデックスの最後の値は26という風になってしまう。

cal_image3.pngもう一つのパターン。今度はセルの選択の基点が右下で、マウスを上、左、という風に動かしてセルを範囲選択した場合。この場合だと、selectedcells(0).valueの値は23、インデックスの最後の値は26という風になる。

セルの選択の方法によってインデックスの並びがそれぞれ変わり、統一性はないということになる。特にカレンダーのような順番に並んだセルの値を参照するときなどの場合に不都合が生じることになる。

-vb.net

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

関連記事

no image

datagridの選択した行のセルの値を取得する

備忘。.netframeworks2.0のコントロールであるdatagridコントロールで、バインドされたデータ一覧から選択された行のセル値を取得する方法。datagridのSelectedRowsプ …

no image

テーブルのフィールドのデータ型を調べる

プログラムで使っているテーブルのあるフィールドが設計ミスで使われていないことに気づき、せっかくだからそのフィールドのデータ型を変えて別の用途に使ってみようというトリッキーなことをやろうとしたけれど、や …

no image

メタ文字のエスケープ

sqlインジェクション対策の一つのメタ文字のエスケープ処理。ローカルで利用するwindowsアプリケーションなので、インターネット上のwebアプリのように攻撃されることはないけれど、操作している上でメ …

no image

継承と実装

用語がどうもごちゃごちゃしていて頭に入ってきにくい。解説する人によって捉え方が違っていたりするのが原因ではあるのだろうけれど。vb.netにおける継承と実装について。 継承 : inherits 実装 …

no image

datagridの列幅の調整ができない

こんなことで嵌るのは私くらいかもしれないけれど一応備忘録 datagridviewのプロパティにある、AllowUserToResizeColumnsの値をtrueに設定しても、実際にデータをバインド …