|
分類:[C#]
C#とあるサイトからサンプルを持ってきて 同一フォーム内の2つのDataGridViewで ドラッグアンドドロップを行う処理が出来ています。 カラム数はどちらも同じです。
そこで今やりたいことは、親フォーム(Form1)にdataGridView1を 子フォーム(form2)にdataGridView2を作成して親フォームから 子フォームへドラッグアンドドロップしてデータを渡す処理を作ろうとしています。
どこを改変してゆけばよいでしょうか?
public Form1() { InitializeComponent(); this.Load+=new EventHandler(Form1_Load); dataGridView1.MouseDown+=new MouseEventHandler(dataGridView1_MouseDown); dataGridView2.DragEnter+=new DragEventHandler(dataGridView2_DragEnter); dataGridView2.DragDrop+=new DragEventHandler(dataGridView2_DragDrop); //とりあえず表示 form2.Show(); }
private void Form1_Load(object sender, EventArgs e) { // テストの準備 // ドロップ元 dataGridView1.Columns.Add("Col1", "Col1"); dataGridView1.Columns.Add("Col2", "Col2"); dataGridView1.Rows.Add("1-1", "1-2"); dataGridView1.Rows.Add("2-1", "2-2"); dataGridView1.Rows.Add("3-1", "3-2"); // ドロップ先 dataGridView2.Columns.Add("Col1", "Col1"); dataGridView2.Columns.Add("Col2", "Col2"); dataGridView2.Rows.Add("A-1", "A-2"); dataGridView2.AllowDrop = true; }
private void dataGridView1_MouseDown(object sender, MouseEventArgs e) { DataGridView.HitTestInfo hit = dataGridView1.HitTest(e.X, e.Y);
// 念のため、有効なセル上でのみ許可する if (hit.Type == DataGridViewHitTestType.Cell && (dataGridView1.NewRowIndex == -1 || dataGridView1.NewRowIndex != hit.RowIndex)) { dataGridView1.DoDragDrop( dataGridView1.Rows[hit.RowIndex], DragDropEffects.Copy); } }
private void dataGridView2_DragEnter(object sender, DragEventArgs e) { e.Effect = DragDropEffects.Copy; }
private void dataGridView2_DragDrop(object sender, DragEventArgs e) { Point clientPoint = dataGridView2.PointToClient(new Point(e.X, e.Y)); DataGridView.HitTestInfo hit = dataGridView2.HitTest(clientPoint.X, clientPoint.Y);
// ドロップするデータ DataGridViewRow dgvr = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow)); object[] cellData = new object[dgvr.Cells.Count]; for (int col = 0; col < dgvr.Cells.Count; col++) cellData[col] = dgvr.Cells[col].Value;
// 追加 if (hit.RowIndex != -1) dataGridView2.Rows.Insert(hit.RowIndex, cellData); else dataGridView2.Rows.Add(cellData); }
環境は、.NET Framework2.0 windows7
|