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

贴代码

 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 != -)
{
if (this.dgvUser.SelectedRows.Count > )
{
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[].DataBoundItem as DataRowView).Row["UserID"].ToString();
string organizeid = (rowCollection[].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中拖动功能实现技巧的更多相关文章

  1. winform中DataGridView实现分页功能

    WinForm轻松实现自定义分页 (转载) WinForm轻松实现自定义分页 (转载)   转载至http://xuzhihong1987.blog.163.com/blog/static/26731 ...

  2. Winform中实现ZedGraph新增自定义Y轴上下限、颜色、标题功能

    场景 Winform中实现ZedGraph的多条Y轴(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1001322 ...

  3. Winform中TextBox控件开启自动提示补全功能

    问题:Winform开发中,有一个TextBox控件用以输入姓名,现希望在输入名字时能够自动提示所有可能的名字. 解答:winform中的TextBox控件含有如下三个属性:   ① AutoComp ...

  4. winform中的小技巧【自用】

    一.C#在WinForm中怎样让多行TEXTBOX的换行 今天做项目,有一段提示文字需要弹出来,由于太长,我就想能不能让它换行.然后就百度了一下,嘿嘿,方法很好用哦. 原文链接:https://blo ...

  5. Excel与Word套打功能使用技巧及EXCEL数据处理成绩

    Excel与Word套打功能使用技巧 婚礼邀请友人参加,就需要写请柬.而且写请柬不但要求字写得端正,还不能有错别字,再加上邀请的朋友多,写请柬就是一个劳累活.这时我们利用Word的套打功能,就会让写请 ...

  6. Visual Studio 2015中的常用调试技巧分享

    .NET 技术交流群:337901356 欢迎您的加入! 为什么要学习调试? 调试(Debug)是作为一个程序员必须要学会的东西,学会调试可以极大的提高开发效率,排错时间,很多人不喜欢调试,但我认为这 ...

  7. WebApi-路由机制 Visual Studio 2015中的常用调试技巧分享

    WebApi-路由机制   一.WebApi路由机制是什么? 路由机制通俗点来说:其实就是WebApi框架将用户在浏览器中输入的Url地址和路由表中的路由进行匹配,并根据最终匹配的路由去寻找并匹配相应 ...

  8. C#在WinForm中使用WebKit传递js对象实现与网页交互的方法

    这篇文章主要介绍了C#在WinForm中使用WebKit传递js对象实现与网页交互的方法,涉及针对WebBroswer控件及WebKit控件的相关使用技巧,需要的朋友可以参考下 本文实例讲述了C#在W ...

  9. C#中winform中panel重叠无法显示问题

    C#中winform中panel重叠无法显示问题: 最近开发一个项目有个需求是需要多个模式来回切换的,本来考虑使用多个窗口来实现这个功能,但是这样做浪费资源,而且工作量大,所以想到使用panel控件来 ...

随机推荐

  1. 3D照片放大展示窗口

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. java 读取Excel文件并数据持久化方法Demo

    import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util ...

  3. Winform ListView 元素拖动

    //ListView 属性 /* AllowDrop : True */ ListView objLVDrag; private void listView_DragDrop(object sende ...

  4. Java线程总结

    在java中要想实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口. 对于直接继承Thread的类来说,代码大致框架是: class 类名 extends Thread ...

  5. 数据可视化工具zeppelin安装

    介绍 zeppelin主要有以下功能 数据提取 数据发现 数据分析 数据可视化 目前版本(0.5-0.6)之前支持的数据搜索引擎有如下 安装 环境 centOS 6.6 编译准备工作 sudo yum ...

  6. cannot modify header information 关于实现widget页面跳转的问题

    查找网上解决此问题的方法多是一样的,不过今天又遇到了这样的问题.试过之后发现可行: 在C盘的WINDOWS或者你的PHP文件夹中找到php.ini 这个配置文件,然后查找一项:output_buffe ...

  7. Sql Server服务远程过程调用失败解决

    Sql Server服务远程过程调用失败解决   问题:       今天SQL数据库登录不上了,然后想启动Sql实例,却发现如下问题(配置环境:win7旗舰版x64,SqlServer2008R2, ...

  8. 夺命雷公狗---Thinkphp----11之管理员的增删改查的完善

    由于我们刚才的帐号还没通过任何的验证就可以直接进入数据库了,这当然不是不合理的交互逻辑,所以我们要修改下,让他变得3合理一些, 所以我们还是要按照套路来修改几处即可解决问题: 首先修改下添加的控制器: ...

  9. Power Gating的设计(模块)

    Switching Fabric的设计: 三种架构:P沟道的switch vdd(header switch),N沟道的switch vss(footer switch),两个switch. 但是如果 ...

  10. Android应用开发中的风格和主题(style,themes)

    http://www.cnblogs.com/playing/archive/2011/04/01/2002469.html 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验, ...