Foxtable(狐表)用户栏目专家坐堂 → 想让窗口数据随光标移动显示


  共有18676人关注过本帖树形打印复制链接

主题:想让窗口数据随光标移动显示

帅哥哟,离线,有人找我吗?
cpayinyuan
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/8/25 7:15:00 [显示全部帖子]

以下是引用czy在2009-8-24 12:05:00的发言:
你用的是datalist,现在已经过时了。

Dim dst As WinForm.DataList = e.Form.Controls("DataList1")
Dim dr as DataRow = dst.Current '获得选定行
If dr Is Nothing Then
    Return
End If
Dim Index As Integer = Tables("表A").FindRow(dr) '获得选定行在Tables("订单")中的位置
If Index >=0 Then '如果选定行在Tables("订单")中存在
    Tables("表A").Position = Index '定位到选定行
End If

    这在以前的DataList中是最常用的功能,我的每个DataList都有这样的代码。

    现在的新Table控件中,这样的功能如何实现?我试了一下,在Table控件的类型设为Normal,副本设为True时,单击或双击时好像都不能直接定位当前行?执行DoubleClick事件时,Table的当前行(current)并不是实际双击的行,这是怎么回事。

[此贴子已经被作者于2009-8-25 7:27:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/8/25 7:37:00 [显示全部帖子]

以下是引用reachtone在2009-8-25 7:30:00的发言:
千万别想的太复杂,table的副本,当前行就是:CurrentTable.Current。用这个可以直接得到当前行:
Dim r as Row = CurrentTable.Current

     我想双击打开编辑窗口时,直接显示当前行的数据,该怎样实现?(这是最常用的功能了)。好像目前的Table并不能直接定位,难道也要像以前的DataList那样,用FindRow和行号再定位一次?


 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/8/25 16:48:00 [显示全部帖子]

以下是引用狐狸爸爸在2009-8-25 9:17:00的发言:
1、用原本,这样可以帮定
2、不用邦定,自己写代码,双击后,打开编辑窗口,将内容写入各个对应的编辑框,编辑结束后,单击保存按钮,将编辑框的内容写入表,这样还可以加入取消编辑的功能。
[此贴子已经被作者于2009-8-25 9:17:29编辑过]

     原来用DataList时,最早我采用您的方法2,将内容逐个写入各个对应的编辑框,但无耐我的编辑窗口太多,每个窗口的输入框也太多,写这个可不是一件容易的事。后来,我认真学习了DataList中利用FindRow和行号进行当前行定位的功能,并进行了灵活运行,发现效率提高多了。现在,出现了改进版的Table控件,而且贺老师一下强调功能强大,本来想着既然是Table控件,定位当前行应该更简单了,但没想到,把Table作为副本时,不但没有比原来方便,竟然连基本的定位功能也没有了,实在想不通!不要告诉我把副本设为False,这样不方便!实在不行,就保留原来DataList的那个笨办法也行啊(就是利用FindRow和行号定位),也总比不能定位,用代码一个一个的写入输入框要快得多吧!
    Table的SQlTable方面的确功能很强大,比原来灵活很多,但在增强新功能的同时,不应把原来很常用的功能变得越来越麻烦,甚至取消了,有点顾此失彼的感觉!

     补充:我又试了一下,当副本设为False时,即使把表锁定也打不开DoubleClick事件,不知怎么回事?

[此贴子已经被作者于2009-8-25 17:52:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/8/25 17:15:00 [显示全部帖子]

以下是引用reachtone在2009-8-25 16:59:00的发言:

呵呵,table的当前行就是current啊,行号就是current.index,点哪打哪,还要怎么定位呢?

   可能老兄没明白我的意思,我不是指引用当前行,而是光标在Table上的某一行的时候,打开编辑窗口(编辑窗口的输入框与表的字段绑定),编辑窗口中应显示当前行的数据。目前的系统中,Table 控件的行改变时,打开编辑窗口时显示的信息不会跟着改变。
     最早的时候,我是用变量在表的输入框与表交换信息的,但后来发现这样太麻烦,而且,在输入框中也需要计算时会更加麻烦,所以,后来,把输入框与字段直接绑定,效率就高多了,但使用这种方法有一个前提,因为输入框显示的是当前行的信息,所以,当前行必须能够随着光标改变而改变,否则,是无法使用的!


 回到顶部
帅哥哟,离线,有人找我吗?
cpayinyuan
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:六尾狐 帖子:1412 积分:8937 威望:0 精华:0 注册:2008/9/1 8:57:00
  发帖心情 Post By:2009/8/26 7:53:00 [显示全部帖子]

以下是引用reachtone在2009-8-25 18:13:00的发言:

呵呵,不好意思,13楼的例子有点太简单了。一旦在窗口table进行筛选等操作,位置就不对了,编辑的内容也错了。
表B的双击事件改成这样就没问题了(这是通过datarow的行位置来查找的,不受table筛选等的影响)。
If e.Table.name = "列表窗口_Table1"
    Dim r as Datarow = CurrentTable.Current.DataRow
    tables("表B").Position = tables("表B").FindRow(r)
    Forms("编辑").open()
End If
这只是思路而已,可根据实际需要再完善。我还是觉得用副本太麻烦,不如sqltable简单。

[此贴子已经被作者于2009-8-25 18:17:24编辑过]

谢谢,这样可以定位,和以前DataList中的方法差不多,但比以前更麻烦,不知贺老师能否提供一种方法,让表Table的当前行自动跟着Table副本的当前行走,自动保持一致。

我同意reachtone老兄的意见,我认为SqlTable是一个真正的伟大创举,它可以对没有加载的表在窗口中生成Table和Datatable,而且可以有自己的事件。


 回到顶部