DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DragDropについて

  • 題名: DragDropについて
  • 著者: SNF
  • 日時: 2004/04/14 15:22:19
  • ID: 3662
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
分類:[.NET]

初めて書き込みさせていただきます。

今VB.NETでDataGridのRowをもう片方のDataGridに
DragDropするというプログラムを組もうとしているのですが、
プログラミング初心者のため実装方法が考えれませんでした。

よかったらアドバイス等をいただけないでしょうか?
■No3662に返信(SNFさんの記事)
> 初めて書き込みさせていただきます。
>
> 今VB.NETでDataGridのRowをもう片方のDataGridに
> DragDropするというプログラムを組もうとしているのですが、
> プログラミング初心者のため実装方法が考えれませんでした。
>
> よかったらアドバイス等をいただけないでしょうか?

ここを参照するといいかも。
http://dobon.net/vb/bbs/index.html#multipost
■No3663に返信(どらごらさんの記事)
> ■No3662に返信(SNFさんの記事)
>>初めて書き込みさせていただきます。
>>
>>今VB.NETでDataGridのRowをもう片方のDataGridに
>>DragDropするというプログラムを組もうとしているのですが、
>>プログラミング初心者のため実装方法が考えれませんでした。
>>
>>よかったらアドバイス等をいただけないでしょうか?
>
> ここを参照するといいかも。
> http://dobon.net/vb/bbs/index.html#multipost
>

えっとマルチやってないんですけど。。。
どこのサイトもListBoxの例でやっていた為
応用が難しかったので書かせていただいたんです。
> どこのサイトもListBoxの例でやっていた為
> 応用が難しかったので書かせていただいたんです。

難しいというのは、具体的にはどのあたりでしょうか?

 わかりづらくてすいません。ListBoxの場合はセルなどが無いですが、
DataGridのセルに入った値を列ごとにドラッグドロップさせようとプログラミングを
組もうとすると、列を取得しようとしてもcurrentが表示されてしまい
エラーになってしまったり、ドラッグは出来てもドロップが出来なかったりしています。
移動先のセルを用意しておくべきか、移動時にセルを作成する形を取るのかも悩んでいます。
■No3693に返信(SNFさんの記事)
> えっとマルチやってないんですけど。。。
> どこのサイトもListBoxの例でやっていた為
> 応用が難しかったので書かせていただいたんです。

そうでしたか。すみません。すでに削除されてますが、ちょっと前の
No.3632,3634のツリーにDataGrid2つの発言があったので。。。

この話はおいておいて。。。

■No3728に返信(SNFさんの記事)
>  
>  わかりづらくてすいません。ListBoxの場合はセルなどが無いですが、
> DataGridのセルに入った値を列ごとにドラッグドロップさせようとプログラミングを
> 組もうとすると、列を取得しようとしてもcurrentが表示されてしまい
> エラーになってしまったり、ドラッグは出来てもドロップが出来なかったりしています。
> 移動先のセルを用意しておくべきか、移動時にセルを作成する形を取るのかも悩んでいます。

えっと何点か確認していいですか?
質問内容はドラッグ元のDataGridをA、ドロップ先をBとして、
Aの行をまるまるBにドラグドロップしたい。ってことですよね?

1.ドラッグの仕方がわからない?
2.ドラッグの仕方はわかるが、行のドラッグの仕方がわからない?
3.ドロップの受け取り方がわからない?

アドバイスとしてまずセルのDragDropができるようになってから、RowのDragDropを
調べた方が良いと思います。
DataCell→DataRowに変わるだけだと思いますから。
#カラムが生成されてるか? の判断は必要だと思います。

ListBox→DataGridのサンプルへのリンクも貼っておきますね。
http://searchvb.techtarget.com/tip/1,289483,sid8_gci914338,00.html?Offer=vbtop52

P.S.
今まではサンプル書いていたのですが、仕事が終わり手元にVB.NET環境が
ありません。Delphi8 For .NETならあるんですけど。。。

あと最後まで付き合うつもりですけど、明日から旅行に行って、仕事探しも
あるため、レスは遅くなるかもしれないです。
■No3741に返信(どらごらさんの記事)
> えっと何点か確認していいですか?
> 質問内容はドラッグ元のDataGridをA、ドロップ先をBとして、
> Aの行をまるまるBにドラグドロップしたい。ってことですよね?
>
> 1.ドラッグの仕方がわからない?
> 2.ドラッグの仕方はわかるが、行のドラッグの仕方がわからない?
> 3.ドロップの受け取り方がわからない?
>
> アドバイスとしてまずセルのDragDropができるようになってから、RowのDragDropを
> 調べた方が良いと思います。
> DataCell→DataRowに変わるだけだと思いますから。
> #カラムが生成されてるか? の判断は必要だと思います。
>
 
ご返事ありがとうございます。今は一応ドラッグについてはアクションが起きているので出来ていると思います。行のドラッグはCurrentRowIndexを使えばどうにかなると思っています。

 ドロップの受け取り方が今一番わからない場所で、ドラッグしたデータをドロップする時に、取得した値をDataGrid2(B)にドロップする場合カラムが生成されているか(ドラッグしたときにデータテーブルも取得されているのか)?生成するべきなのか(中のデータだけ抽出されてデータテーブルが無いからドロップできないのか)?という部分で混乱してしまっています。 考え方が未熟の上文章が稚拙で大変申し訳ありません。。。

> P.S.
> 今まではサンプル書いていたのですが、仕事が終わり手元にVB.NET環境が
> ありません。Delphi8 For .NETならあるんですけど。。。
>
> あと最後まで付き合うつもりですけど、明日から旅行に行って、仕事探しも
> あるため、レスは遅くなるかもしれないです。
>

こちらこそVB.NET入門の上プログラミングに関しても入門者なので考え方が上手く受け取れなかったり、伝え方や考え方がおかしくて腹立たしい思いをさせてしまうかもしれませんが、よろしくお願いいたします。
どこが分からないのかいまいち分からないので、とりあえず参考になりそうなページを紹介しておきます。(サンプルは見てないので分かりませんが...。)

・Windows Forms FAQ - How can I move rows by dragging the row header cell
http://www.syncfusion.com/faq/winforms/search/832.asp
2004/05/13(Thu) 10:18:19 編集(投稿者)

ご無沙汰です。試行錯誤して続けた結果ようやく
DataGrid〜DataGridへのDragDropが可能になりました。

未熟なので記述など見づらいかもしれませんがご容赦を。。。


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Static Dim i As Integer

'データテーブルに列を表示させる

myDataRow = myDataTable.NewRow
i = i + 1
myDataRow("No") = i
myDataRow("1st") = TextBox1.Text
myDataRow("2nd") = TextBox2.Text
myDataRow("3rd") = TextBox3.Text
myDataTable.Rows.Add(myDataRow)

End Sub

'DataGrid2内にドラッグされた時
Private Sub DataGrid2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGrid2.DragEnter

'ドラッグされているデータ型か調べ、
'そうであればドロップ効果をMoveにする
If e.Data.GetDataPresent(GetType(DataRow)) Then
e.Effect = DragDropEffects.Move
Else
'string型でなければ受け入れない
e.Effect = DragDropEffects.None
End If
'Console.WriteLine(e.Effect)
End Sub

'DataGrid2にドロップされたとき

Private Sub DataGrid2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles DataGrid2.DragDrop

If e.Data.GetDataPresent(GetType(DataRow)) Then
Dim target As DataGrid = CType(sender, DataGrid)
Dim myTable As DataTable = target.DataSource
'ドロップされたデータ(datarow型)を取得
Dim itemText As DataRow = (e.Data.GetData(GetType(DataRow)))

'ドロップされたデータをデータテーブルに追加する
myRow = myTable.NewRow
myRow("No") = itemText(0)
myRow("1st") = itemText(1)
myRow("2nd") = itemText(2)
myRow("3rd") = itemText(3)
myTable.Rows.Add(myRow)

End If

End Sub

Private Sub DataGrid1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGrid1.MouseDown

Dim grid As DataGrid = CType(sender, DataGrid)
Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
Dim hrow As Integer
Dim hr As DataRow
Dim a As DataTable = CType(DataGrid1.DataSource, DataTable)

'ドラッグの準備
If e.Button = MouseButtons.Left Then

'座標データの取得
hti = grid.HitTest(e.X, e.Y)
'座標データから行ナンバーの取得
hrow = hti.Row
Try
'行ナンバーから行データの取得
hr = a.Rows(hrow)


'ドラッグするアイテムの内容を取得する()
Dim itemText As DataTable = (grid.DataSource)
'ドラッグ&(ドロップ処理を開始する)
Dim dde As DragDropEffects = grid.DoDragDrop(hr, DragDropEffects.Move)

Catch ex As Exception

End Try
End If
End Sub


以上のやり方で動作確認することが出来ました。
  • 題名: すいません。。。
  • 著者: SNF
  • 日時: 2004/05/13 10:17:01
  • ID: 4014
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
やたら長くなってしまって申し訳ありませんでした。。。

これからも勉強して知識と技術を身に付けて行きたいと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板