回 帖 发 新 帖 刷新版面

主题:如何獲取光標所在表格的列名

用什麼方法或函數可以獲得光標所在表格中的列名?如:
  
  表格有9列,其列名:COLUMN1~COLUMN9,不管光標佇在哪一列,都可以獲取光標所佇列的列名?(特別注意,表格的列會因用戶的使用習慣發生拖動情形,即這9列不一定會按123....去排序顯示)

回复列表 (共10个回复)

沙发


1.列是不会受显示次序的改变的,在表中是第几列就是第几列
2.获取表格列名首先的使用GetFldState()
3.然后通过对列的排名来获取列名,这比较有点烦琐

关键:列名=getfldtate()
?列名
看到结果后,就知道如何获取了真正的列名了,试试就知道了

板凳

[quote]
关键:列名=getfldtate()
[/quote]
 
  杯具了,GETFLDSTATE(cFIELDName|nFieldNumber[,cTableAlias|nWorkArea]

  返回的只是表中或遊標中某字段是否被編輯,是否被添加記錄,或者指示當前記錄的刪除狀態是否被更改.

 我現在就是不知道cFieldNumber及nFieldNumber,我要怎麼用啊?

 現在狀況是:一個填滿數據的表,我光標(FOCUS)移去移來,在移的過程中,我就要在另外一個表中顯示FOCUS所在列的值.哪怕只是獲得列號,我都可以輕鬆地獲得值.但是因為用戶的習慣,他把本來在第一個顯示的第一列拖在了最后一列,所以光標在最后一列(顯示中的最后一列)時,我用GRID.AFTERROWCHANGE得到值就是原來倒數第二列的值,而放在第一列(顯示中的第一列)時,得到的卻是第二列的值.

3 楼

http://bbs.pfan.cn/post-268353.html

4 楼

SYS(18)返回的是字段名,這個針對我的要求來言,是已經解決了問題.但是6.0以后的書籍都建議棄用VARRED()和SYS(18),(因為這兩個函數只是為了往后兼容).而使用CONTROLSOURCE,NAME屬性或ACTIVECONTROL屬性.但在這個實例上,這三個屬性好象還是解決不了.不知是否其它的妙用.

5 楼

做一个自定义函数,把sys(18)得到的字段名转换成.column1、2、3……就是了,因为原先第N列对应的字段名是楼主已知的。

6 楼

AfterRowColChange 事件
LOCAL lcColIndex
lcColIndex=ALLTRIM(STR( nColIndex))
=MESSAGEBOX(This.Column&lcColIndex..header1.caption)

7 楼

[quote]AfterRowColChange 事件
LOCAL lcColIndex
lcColIndex=ALLTRIM(STR( nColIndex))
=MESSAGEBOX(This.Column&lcColIndex..header1.caption)[/quote]

  謝謝您的回復,這個事件在表格的各列沒有拖動之前,是完全可以達到目的的.一但經過用戶的拖動(即列的相對位置發生變化),其返回的值就不是光標所在列的值了(比如表格一共有2列,如果你把本來在第二列顯示的拖在第一列,當你光標佇在第一列時,其NCOLINDEX返回的結果是1,你再用COLUMN&NCOLINDEX,得到的是拖動之前第一列的值,而不是你光標現在佇留列的值).

  SYS(18)可以解決,只是6.0以后的書籍都建議棄用這個函數而用ACTIVECONTROL屬性替代.可針對此種情況,我還一時不明如何替代.

8 楼

[quote]做一个自定义函数,把sys(18)得到的字段名转换成.column1、2、3……就是了,因为原先第N列对应的字段名是楼主已知的。[/quote]


  謝謝您的幫助,用SYS(18)可以達成我要的結果.我的意思是6.0以后的書籍都建議棄用SYS(18)這個函數,那我們要如何繞過這個SYS(18)來達成目的.

9 楼

AfterRowColChange 事件

Local lcI,lcColName,i
lcColName=''

For i =1 To This.ColumnCount
    lcI=Alltrim(Str(i))
    If This.Column&lcI..ColumnOrder  =nColIndex
        lcColName=This.Column&lcI..header1.Caption
    Endif
Endfor

=MESSAGEBOX(lcColName)

10 楼

AfterRowColChange 事件

oHead=SYS(1270)
?oHead.header1.Caption

我来回复

您尚未登录,请登录后再回复。点此登录或注册