当前位置:网站首页 > R语言数据分析 > 正文

gridview布局(gridview.columns.add)



很多时候我们会有这样的需求:一个窗体中有两个GRID,两个GRID中数据表结构差不多,我们要把一个GRID中的数据加入到另一个GRID中。一般的做法是新增一个导入或导出按钮,选择目标行后,通过按钮来触发事件,实现两个GRID中数据的增减。

嘿嘿,但是,如果我们能够在选中目标行后,直接用鼠标将选中的行拖拽到另一个GRID中是不是比较酷一点呢。

下面,我们就来看看如何实现它。

首先,创建示例数据。

我们还是用上一节:玩转DataGridView之行的展开与收缩的数据脚本,再用它新建两张表就行。

说一下思路:我们要实现的效果是在源Grid中选中行后,按住鼠标左键不放,将选中的行从源Grid中拖出,拖入到目标Grid中。其中所作的动作有四个:

1.选中行(可以单行或多行)

2.拖拽行

3.从源Grid中移除选中行(其实也可以不移除,看实际需求了,本例中将行从Grid中移除了)

4.目标Grid中新增选中行。

我们来一一分析。我在项目中建了两个Grid:sourceGrid即源,targetGrid即目标。

1.选中行

我们必需先要有一个全局变量来保存选中的行。

给sourceRowCollection赋值当然是在sourceGrid_MouseDown事件中了。这里我们还必需要保证鼠标点击在有效区域才能给sourceRowCollection赋值。

这里有用到一个类HitTestInfo,NND,不知道微软为什么这样命名,害我找了很久。这个类可以获取当前鼠标所在的RowIndex和ColumnIndex

2.拖拽行

拖拽行就要用到一个很重要的方法:DoDragDrop,它有参数,一个是要拖拽的数据,一个要实现的效果。重要的是调用了后DoDragDrop可以触发目标控件(本例中是targetGrid)的DragOver、DragDrop等事件。当然前提是你的目标控件的AllowDrop为True。我之前就是因为AllowDrop没有设置为true,没有触发DragOver事件,害我瞎找了好久的原因。

关于DoDragDrop,参考:http://msdn.microsoft.com/zh-cn/library/ie/system.windows.forms.control.dodragdrop.aspx这里更详细的介绍,也有一个很好的例子。

我们在sourceGrid_MouseMove中去调用DoDragDrop方法:

拖拽完成时,会触发DragDrop,我们在这里将拖拽的行赋给targetGrid

android 可拖动gridview_拖拽

android 可拖动gridview_控件_02

3.从源Grid中移除选中行

移除选中行已经在sourceGrid_MouseMove事件中了,即:

4.目标Grid中新增选中行

新增行的代码也在targetGrid_DragDrop中,因为这个在拖拽完成时触发。这里我们分新增与插入的情况,详见上面的代码。

最后说明一下,我只做了界面上的两个GRID中数据的增减,并没有将更改保存到数据库中,大家有兴趣的可以自己去实现一下。

PS:貌似同一个窗体中的两个GRID不能有相同的列名,这点微软的做法让我很不爽,绑定数据的时候我不得不多写一个方法。

到此这篇gridview布局(gridview.columns.add)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 华为模拟器ensp交换机配置(华为ensp模拟器serial接口怎么连接)2026-02-26 17:09:10
  • airplay怎么关掉(airplay取消)2026-02-26 17:09:10
  • vier是什么品牌(rogervivier是什么品牌)2026-02-26 17:09:10
  • ore怎么读?(before怎么读)2026-02-26 17:09:10
  • docker守护进程没有启动(docker守护进程是什么)2026-02-26 17:09:10
  • hprof文件可以删除吗(hpk文件可以删吗)2026-02-26 17:09:10
  • 破解加密的word文档(如何破解加密的word文档)2026-02-26 17:09:10
  • 连接redis集群命令(redisson连接集群错误)2026-02-26 17:09:10
  • uchar i什么意思(uchari什么意思)2026-02-26 17:09:10
  • 锁表原因oracle(oracle锁表的原因)2026-02-26 17:09:10
  • 全屏图片