DataGridView右键多行的移动以及多个DataGridView多行复制的实现


        private DataGridViewSelectedRowCollection SelRows;
        private void dgvAllReg_MouseMove(object sender, MouseEventArgs e)
        {
            if ((e.Button & MouseButtons.Right) == MouseButtons.Right)
            {
                DragDropEffects dropEffect = dgvAllReg.DoDragDrop(this.TabText, DragDropEffects.Move);//|DragDropEffects .Copy SelRows  this.TabText
            }
        }

        private int rowIndexOfItemUnderMouseToDrop;

     private void dgvAllReg_DragDrop(object sender, DragEventArgs e)
        {
            System.Diagnostics.Debug.WriteLine(this.TabText + "  DragDrop");
            SetForm setFrm = (SetForm)Program.m_MainForm.GetContentFromPersistString(e.Data.GetData(DataFormats.Text).ToString());//e.Data.GetData(DataFormats.Text).ToString()//列表视图

            if (this.TabText.Equals(e.Data.GetData(DataFormats.Text).ToString()))//this.dtBand.Equals(Program.m_MainForm.AllRegDataSet.Tables["SetReg"])
            {
                //由于鼠标的位置是与屏幕相关的,它必须转换为与客户端相匹配的点
                Point clientPoint = dgvAllReg.PointToClient(new Point(e.X, e.Y));
                //获取鼠标按下时的行的索引值
                rowIndexOfItemUnderMouseToDrop = dgvAllReg.HitTest(clientPoint.X, clientPoint.Y).RowIndex;

                DataRow dgvRow;                
                for (int i = 0; i < SelRows .Count; i++)
                {
                    dgvRow = ((SelRows[i]).DataBoundItem as DataRowView).Row;
                    DataRow drr = this.dtBand.NewRow();
                    drr.ItemArray = dgvRow.ItemArray;
                    dtBand.Rows.Remove(dgvRow);
                    dtBand.Rows.InsertAt(drr, (rowIndexOfItemUnderMouseToDrop) );
                }
                this.dgvAllReg.ClearSelection();
            }
            else
            {
                DataTable dt = (DataTable)this.dgvAllReg.DataSource;

                int nAdd = 0;
                this.dgvAllReg.ClearSelection();

                foreach (DataGridViewRow dgr in setFrm.dgvAllReg.SelectedRows)
                {
                    if (dgr.DataBoundItem != null)
                    {
                        Boolean bHave = false;
                        foreach (DataGridViewRow tdgr in this.dgvAllReg.Rows)
                        {
                            if (tdgr != null)
                            {
                                if (((DataRowView)tdgr.DataBoundItem).Row["地址"].Equals(((DataRowView)dgr.DataBoundItem).Row["地址"]))
                                {
                                    tdgr.Selected = true;
                                    bHave = true;
                                    break;
                                }
                            }

                        }
                        if (bHave == false)
                        {
                            DataRow dr = dt.NewRow();
                            dr.ItemArray = ((DataRowView)dgr.DataBoundItem).Row.ItemArray;
                            dt.Rows.Add(dr);
                            nAdd++;
                        }
                    }
                }
                for (int i = 0; i < nAdd; i++)
                {
                    this.dgvAllReg.Rows[this.dgvAllReg.Rows.Count - 1 - i].Selected = true;
                }
                setFrm.dgvAllReg.ClearSelection();
            }
        }

        private void dgvAllReg_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private void dgvAllReg_MouseUp(object sender, MouseEventArgs e)
        {
            SelRows = dgvAllReg.SelectedRows;
        }

        private void dgvAllReg_DragOver(object sender, DragEventArgs e)
        {
            e.Effect = DragDropEffects.Move;
        }

        private int dragRowFromMouseDown;
        private void dgvAllReg_MouseDown(object sender, MouseEventArgs e)
        {

            if (dgvAllReg.HitTest(e.X, e.Y).ColumnIndex == -1 && dgvAllReg.HitTest(e.X, e.Y).RowIndex != -1)
            {
                dgvAllReg.Columns["单位"].SortMode = DataGridViewColumnSortMode.Automatic ;//Automatic;
                dragRowFromMouseDown = dgvAllReg.HitTest(e.X, e.Y).RowIndex;
            }

            if (dgvAllReg.HitTest(e.X, e.Y).RowIndex == -1 && dgvAllReg.HitTest(e.X, e.Y).ColumnIndex != -1)
            {
                dgvAllReg.Columns[dgvAllReg.HitTest(e.X, e.Y).ColumnIndex].SortMode = DataGridViewColumnSortMode.Automatic;
            }
        }


可以实现多行移动和复制,用心试的童靴会发现里面有个问题,不知道你们发现了没???

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值