0

私は最近、WinForms アプリで 1 つの datagridview から別の datagridview に行をドラッグ アンド ドロップするためのコードを見つけようとしていました。最終的に動作するコードを見つけましたが、小さな問題が 1 つあります。dataGridView2の行を選択してdataGridView1にドラッグするときに、注意を怠ってだらしないと、誤ってその行をdataGridView2の別の行にドラッグしてしまいます。dataGridView2の別の行に消えるようです。ドラッグされている行がdataGridView1にない場合、ドロップを許可しないことを検出する方法はありますか?

 dataGridView2.MouseMove += new MouseEventHandler(dataGridView2_MouseMove);
 dataGridView1.DragEnter += new DragEventHandler(dataGridView1_DragEnter);
 dataGridView1.DragDrop += new DragEventHandler(dataGridView1_DragDrop);

 void dataGridView1_DragDrop(object sender, DragEventArgs e)
    {
        DataGridViewRow row = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;
        if (row != null)
        {
            DataGridViewRow newrow = row.Clone() as DataGridViewRow;
            for (int i = 0; i < newrow.Cells.Count; i++)
            {
                newrow.Cells[i].Value = row.Cells[i].Value;
            }

            this.dataGridView1.Rows.Add(newrow);

        }
    }

    void dataGridView1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
        {
            e.Effect = DragDropEffects.Copy;
        }
    }

    void dataGridView2_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            this.dataGridView2.DoDragDrop(this.dataGridView2.CurrentRow, DragDropEffects.All);
            this.dataGridView2.Rows.Remove(this.dataGridView2.CurrentRow);
        }

    }
4

1 に答える 1

1

datagridview2 の AllowDrop プロパティを false に設定します。

于 2013-09-25T13:50:41.350 に答える