2007年12月10日月曜日

DataGridViewのセル間DragDrop

DragDropの時にはTypeを指定して実際の値を拾う必要があるんだけど、DataGridViewの場合それはDoDragDropイベント発生時の値は利用できないってトコなんだよね。そして標準で用意されているCell関係は全て値のTypeが定義されていない(=Object)なので、はてさてどう書いてあげればいいものか、というとこで悩み中。

DragDrop発生時はこんなコードで、セルの値をDragDropするぞ、とやる。

_dragDrop.DragEffectType = Me.DoDragDrop(Me.CurrentCell.Value, DragDropEffects.Copy)


そして値を受け取る際はこんなコードなんだけど・・・。




Dim targetCell As DataGridViewCell  = Me.CurrentCell


Dim cellValueType As System.Type = targetCell.ValueType


Dim copyValue As Object = drgevent.Data.GetData(cellValueType)


targetCell.Value = copyValue 



問題となるのは3行目。ここでTypeが必要なんだけど、CellクラスのValueTypeは見事にObjectでやんの。自前で拡張した部分だと、ここはちゃんとTypeを返却してくれるんだけど・・・。



利用できるTypeを取得するGetFormatsメソッドもあることはあるんだけど、それを利用した処理にしてしまうと問題があるような気がしてならないなぁ。

0 件のコメント:

コメントを投稿