ドロップ側の処理
ドロップ側の処理では、まず、ドロップをコピーで行うように設定します。
次に、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;
}
