码迷,mamicode.com
首页 > Windows程序 > 详细

winform中拖动功能实现技巧

时间:2015-06-26 16:15:43      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

实现的需求,我通过拖动选中的用户行放到左边的机构节点上,从而实现用户改变组织机构的关系

如下图

技术分享

贴代码

 private DataGridViewSelectedRowCollection sourceRowCollection = null;
        private int rowIndexFromMouseDown;

        /// <summary>
        /// 用户拖动到机构里改变所属机构关系
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dgvUser_MouseDown(object sender, MouseEventArgs e)
        {
            rowIndexFromMouseDown = dgvUser.HitTest(e.X, e.Y).RowIndex;
            if (rowIndexFromMouseDown != -1)
            {
                if (this.dgvUser.SelectedRows.Count > 0)
                {
                    sourceRowCollection = this.dgvUser.SelectedRows;
                }
            }
            else
            {
                sourceRowCollection = null;
            }
        }

        private void dgvUser_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (sourceRowCollection != null)
                {
                    DragDropEffects effect = this.dgvUser.DoDragDrop(sourceRowCollection, DragDropEffects.Move);
                    if (effect == DragDropEffects.Move)
                    {
                        //在sourceGrid中移除选中行
                        foreach (DataGridViewRow row in sourceRowCollection)
                        {
                            this.dgvUser.Rows.Remove(row);
                        }
                        sourceRowCollection = null;
                    }
                }
            }
        }

        private void tvwOrganize_DragDrop(object sender, DragEventArgs e)
        {
            try
            {
                if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection)))
                {
                    DataGridViewSelectedRowCollection rowCollection = e.Data.GetData(typeof(DataGridViewSelectedRowCollection)) as DataGridViewSelectedRowCollection;
                    if (rowCollection == null)
                    {
                        return;
                    }
                    string userid = (rowCollection[0].DataBoundItem as DataRowView).Row["UserID"].ToString();
                    string organizeid = (rowCollection[0].DataBoundItem as DataRowView).Row["OrganizeID"].ToString();
                    Point p = this.tvwOrganize.PointToClient(new Point(e.X, e.Y));
                    TreeViewHitTestInfo hitTest = tvwOrganize.HitTest(p.X, p.Y);
                    Organize organize = hitTest.Node.Tag as Organize;
                    if (organizeid != organize.OrganizeID && userBiz.UpdateUserOrganize(userid, organize.OrganizeID))
                    {
                        e.Effect = DragDropEffects.Move;
                    }
                    else
                    { e.Effect = DragDropEffects.None; }
                }
            }
            catch (Exception ex)
            {
                e.Effect = DragDropEffects.None;
            }
        }

        private void tvwOrganize_DragOver(object sender, DragEventArgs e)
        {
            if (!e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection)))
            {
                e.Effect = DragDropEffects.None;
                return;
            }
            else
            {
                e.Effect = DragDropEffects.Move;  //这个值会返回给DoDragDrop方法
            }
        }

 

winform中拖动功能实现技巧

标签:

原文地址:http://www.cnblogs.com/njcxwz/p/4602500.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!