ドロップ側の処理
ドロップ側の処理では、まず、ドロップをコピーで行うように設定します。
次に、DragDropイベントハンドラでグリッドにデータを挿入する処理を実行し、データベーステーブル「編集用テーブル」を更新します。
そして、1件のドラッグ&ドロップ操作が終わったら、次のドラッグ&ドロップ操作に備えドラッグ&ドロップ操作をリセットします。これは、独自のプロシージャ(メソッド)「ResetDragDrop」を作成して処理を実行します。
これは、まず新しい行(追加する行)用のDataRowViewオブジェクトを作成します。そして、この行の各列にドラッグされた行の各列のデータを挿入します。
- DragEnterイベントハンドラでC1TrueDBGridクラスのEffectプロパティにドロップをコピーで行うように設定します。
- DragDropイベントハンドラで、C1TrueDBGrid2コントロールのグリッドのデータセットに新しい行を追加します。
- グリッドのカレントレコードを最後の行に移動します。
- そして、このグリッドデータを元にデータベーステーブル「編集用テーブル」をアップデートします(ただしテーブルは保存しませんので、プログラムを終了するとデータベースのテーブル「編集用テーブル」は空のままです)。
- 次のドラッグ&ドロップ操作に備え、ドラッグ側の強調表示をリセットしてドラッグ&ドロップ操作を取り消します。
- プロシージャ(メソッド)「ResetDragDrop」では、ドラッグ&ドロップ用座標を格納するメンバ変数を初期化し、MarqueeStyleプロパティをデフォルト表示に変更します。
Private Sub C1TrueDBGrid2_DragEnter(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragEnter e.Effect = DragDropEffects.Copy '(1) End Sub Private Sub C1TrueDBGrid2_DragDrop(sender As System.Object, e As System.Windows.Forms.DragEventArgs) Handles C1TrueDBGrid2.DragDrop ' C1TrueDBGrid2のグリッドのデータセットに新しい行を追加します。 Try Dim row As Integer = CInt(e.Data.GetData(GetType(Integer))) Dim mydataviewrow As DataRowView = Me.都立図書館リスト_編集用テーブル_DataDataSet.編集用テーブル.DefaultView.AddNew() '(2) mydataviewrow("ID") = C1TrueDBGrid1(row, "ID").ToString() mydataviewrow("市区町村") = C1TrueDBGrid1(row, "市区町村").ToString() mydataviewrow("図書館名") = C1TrueDBGrid1(row, "図書館名").ToString() mydataviewrow("所在地") = C1TrueDBGrid1(row, "所在地").ToString() mydataviewrow("電話番号") = C1TrueDBGrid1(row, "電話番号").ToString() mydataviewrow.EndEdit() C1TrueDBGrid2.MoveLast() '(3) C1TrueDBGrid2.Select() ' データベースに変更を反映 (4) Dim inserted As 都立図書館リスト_編集用テーブル_DataDataSet = Me.都立図書館リスト_編集用テーブル_DataDataSet.GetChanges(DataRowState.Added) If Not (inserted Is Nothing) Then Me.編集用テーブルTableAdapter.Update(inserted) End If Catch ex As System.Exception MessageBox.Show(ex.Message) End Try 'ドラッグ&ドロップ操作をリセット ResetDragDrop() '(5) End Sub Private Sub ResetDragDrop() '強調表示をリセットしてドラッグ&ドロップ操作を取り消す StartDrag_PT = Point.Empty '(6) DragRowNo = -1 C1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder C1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder End Sub
private void c1TrueDBGrid2_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; //(1) } private void c1TrueDBGrid2_DragDrop(object sender, DragEventArgs e) { // C1TrueDBGrid2のグリッドのデータセットに新しい行を追加します。 try { int row = (int)e.Data.GetData(typeof(int)); DataRowView mydataviewrow = this.都立図書館リスト_編集用テーブル_DataDataSet.編集用テーブル.DefaultView.AddNew(); //(2) mydataviewrow["ID"] = c1TrueDBGrid1[row, "ID"].ToString(); mydataviewrow["市区町村"] = c1TrueDBGrid1[row, "市区町村"].ToString(); mydataviewrow["図書館名"] = c1TrueDBGrid1[row, "図書館名"].ToString(); mydataviewrow["所在地"] = c1TrueDBGrid1[row, "所在地"].ToString(); mydataviewrow["電話番号"] = c1TrueDBGrid1[row, "電話番号"].ToString(); mydataviewrow.EndEdit(); c1TrueDBGrid2.MoveLast(); //(3) c1TrueDBGrid2.Select(); // データベースに変更を反映 (4) 都立図書館リスト_編集用テーブル_DataDataSet inserted = (都立図書館リスト_編集用テーブル_DataDataSet)this.都立図書館リスト_編集用テーブル_DataDataSet.GetChanges(DataRowState.Added); if(inserted != null) { this.編集用テーブルTableAdapter.Update(inserted); } }catch(System.Exception ex) { MessageBox.Show(ex.Message); } //ドラッグ&ドロップ操作をリセット ResetDragDrop(); //(5) } private void ResetDragDrop() // 強調表示をリセットしてドラッグ&ドロップ操作を取り消す { StartDrag_PT = Point.Empty; //(6) DragRowNo = -1; c1TrueDBGrid1.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder; c1TrueDBGrid2.MarqueeStyle = C1.Win.C1TrueDBGrid.MarqueeEnum.SolidCellBorder; }