| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1453 人关注过本帖, 1 人收藏
标题:表格与表格见能实现记录拖动吗
只看楼主 加入收藏
zl3323117
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2012-1-27
结帖率:100%
收藏(1)
已结贴  问题点数:10 回复次数:13 
表格与表格见能实现记录拖动吗
在一个表单中,如何实现两个表格间记录直接拖动
搜索更多相关主题的帖子: 表格 记录 如何 
2012-06-27 20:00
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11775
专家分:43421
注 册:2006-5-13
收藏
得分:0 
理论上是可以实现的,检测到鼠标左键按下,就将表格当前记录复制到数组中。鼠标左键释放时若在另一个表格中,就将数组插入到当前表中。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-06-27 20:45
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
是的,用拖拉功能就可实现,VFP提供了这种对象。

授人以渔,不授人以鱼。
2012-06-28 03:20
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9805
专家分:26913
注 册:2012-2-5
收藏
得分:0 
只有想不到,没有做不到。可能有点夸张

坚守VFP最后的阵地
2012-06-28 08:45
zl3323117
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2012-1-27
收藏
得分:0 
回复 3楼 TonyDeng
拖拉功能?如何实现
2012-06-28 17:59
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你希望是怎样的?

授人以渔,不授人以鱼。
2012-06-28 18:41
zl3323117
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2012-1-27
收藏
得分:0 
回复 6楼 TonyDeng
两个Grid控件之间的记录能够一整条的进行拖拽,从A表到B表,表的属性都相同
2012-06-28 19:07
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
test.zip (5.7 KB)


操作:左右两个Grid,用鼠标右键点选其中一条记录(设定在Column1),拖到另一个Grid释放即可。数据表没要求,只要两边结构一样即可,因为用的是现成复制、黏贴命令,其实可以自定义,应付不同结构的表。目前每个表格只绑定了一列可以响应拖放,不在对应列上,是没有反应的。

以下是效果图:原始左边是ABC,右边是XYZ,分别拖动A和Y到对面。

图片附件: 游客没有浏览图片的权限,请 登录注册


现在是覆盖记录,本来想做弹出菜单可选插入(前插、后插)还是覆盖的,没那么多闲时间了。

[ 本帖最后由 TonyDeng 于 2012-6-29 03:41 编辑 ]

授人以渔,不授人以鱼。
2012-06-29 03:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
这是程序源代码:

程序代码:
CLEAR ALL
CLOSE DATABASES ALL
SET DEFAULT TO (Application.ActiveProject.HomeDir)
Form1 = NEWOBJECT("C_Form")
Form1.Show
READ EVENTS
CLOSE DATABASES ALL
CLEAR ALL
RETURN

DEFINE CLASS C_Form AS Form
    Caption = "拖拉数据测试程序"
    WindowState = 2
   
    DIMENSION aRecord[1]
   
    ADD OBJECT Grid1 AS Grid
    ADD OBJECT Grid2 AS Grid
   
    PROCEDURE Load
        USE Table1 IN 0
        USE Table2 IN 0
    ENDPROC
   
    PROCEDURE Unload
        USE IN Table1
        USE IN Table2
    ENDPROC
   
    PROCEDURE Destroy
        CLEAR EVENTS
    ENDPROC
   
    PROCEDURE Activate
        ThisForm.Arrange
    ENDPROC
   
    PROCEDURE Resize
        ThisForm.Arrange
    ENDPROC
   
    PROCEDURE Arrange
        WITH This.Grid1
            .Top = 5
            .Left = 5
            .Width = (ThisForm.Width / 2 - 10) - .Left
            .Height = ThisForm.Height - .Top - 5
        ENDWITH
        WITH This.Grid2
            .Top = 5
            .Left = This.Grid1.Left + This.Grid1.Width
            .Width = This.Width - .Left - 5
            .Height = This.Height - .Top - 5
        ENDWITH
    ENDPROC
   
    PROCEDURE Grid1.Init
        WITH This
            .RecordSourceType = 1
            .RecordSource = "Table1"
            BINDEVENT(.Columns(1).Text1, "MouseDown", This, "MouseDown")
        ENDWITH
    ENDPROC
   
    PROCEDURE Grid1.MouseDown(tnButton, tnShift, tnXCoord, tnYCoord)
        DODEFAULT()
        IF tnButton == 2            && 单击鼠标右键激活拖放
            ThisForm.Get_Record("Table1")
            LOCAL laArray[1]
            AMOUSEOBJ(laArray)      && 获取鼠标下面的对象
            laArray[1].Drag         && 启动拖放
        ENDIF
    ENDPROC
   
    PROCEDURE Grid1.DragDrop(toSource, tnXCoord, tnYCoord)
        LOCAL lnRow, lnCol
       
        WITH This
            .GridHitTest(tnXCoord, tnYCoord, 3, @lnRow, @lnCol)
            .ActivateCell(lnRow, lnCol)
            ThisForm.Put_Record("Table1")
            .SetFocus
        ENDWITH
       
    ENDPROC 

    PROCEDURE Grid2.Init
        WITH This
            .RecordSourceType = 1
            .RecordSource = "Table2"
            BINDEVENT(.Columns(1).Text1, "MouseDown", This, "MouseDown")
        ENDWITH
    ENDPROC
   
    PROCEDURE Grid2.MouseDown(tnButton, tnShift, tnXCoord, tnYCoord)
        DODEFAULT()
        IF tnButton == 2            && 单击鼠标右键激活拖放
            ThisForm.Get_Record("Table2")
            LOCAL laArray[1]
            AMOUSEOBJ(laArray)      && 获取鼠标下面的对象
            laArray[1].Drag         && 启动拖放
        ENDIF
    ENDPROC
   
    PROCEDURE Grid2.DragDrop(toSource, tnXCoord, tnYCoord)
        LOCAL lnRow, lnCol
       
        WITH This
            .GridHitTest(tnXCoord, tnYCoord, 3, @lnRow, @lnCol)
            .ActivateCell(lnRow, lnCol)
            ThisForm.Put_Record("Table2")
            .SetFocus
        ENDWITH
       
    ENDPROC
   
    *--------------------
    * 获取源记录
    *--------------------
    PROCEDURE Get_Record(tcAlias)
        DIMENSION ThisForm.aRecord[FCOUNT(tcAlias)]
        SELECT (tcAlias)
        SCATTER TO ThisForm.aRecord
    ENDPROC
   
    *--------------------
    * 放入记录
    *--------------------
    PROCEDURE Put_Record(tcAlias)
        SELECT (tcAlias)
        GATHER FROM ThisForm.aRecord
    ENDPROC
   
ENDDEFINE


[ 本帖最后由 TonyDeng 于 2012-6-29 03:44 编辑 ]
收到的鲜花
  • sdta2012-06-29 06:28 送鲜花  10朵   附言:我很赞同

授人以渔,不授人以鱼。
2012-06-29 03:42
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9805
专家分:26913
注 册:2012-2-5
收藏
得分:0 
学习了

坚守VFP最后的阵地
2012-06-29 06:28
快速回复:表格与表格见能实现记录拖动吗
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018056 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved