关于dw的getrow问题

javaxi 2008-08-07 04:33:10
GetRow method (DataWindows)
Return value

Returns the number of the current row in dwcontrol. Returns 0 if no row is current and -1 if an error occurs.
If dwcontrol is NULL, in PowerBuilder and JavaScript the method returns NULL.


‘Returns 0 if no row is current ’,有无办法使得一个有数据的数据窗口getrow返回0呢?
我测试了用setrow,但有效值一定要大于0,所以行不通。
...全文
290 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
玉儿o0 2008-08-27
  • 打赏
  • 举报
回复
=0的时候很多呀
你看一下你的基类里是不是有对当前行或者滚动行什么的设置的地。
我还得到过-5呢。(在点击deatail区以外的地方的时候)
sanmao136 2008-08-27
  • 打赏
  • 举报
回复
想把当前行设置为0肯定不行
只能先不设置背景颜色,在clicked事件中用modify把设置颜色弄上去
这办法不是牵强,不常规的做法只能用不常规的办法解决。
njuptcaowei 2008-08-27
  • 打赏
  • 举报
回复
我测试过了,返回的就是0,呵呵,你再测试下看看!
javaxi 2008-08-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 njuptcaowei 的回复:]
刚打开窗口时,你用getrow()所返回的值不就是0吗?有什么疑问?
[/Quote]
测试你就知道了。不是。
njuptcaowei 2008-08-22
  • 打赏
  • 举报
回复
刚打开窗口时,你用getrow()所返回的值不就是0吗?有什么疑问?
ribut9225 2008-08-21
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 javaxi 的回复:]
ribut9225的答案也是相当牵强,考虑不够全面。
要是被选中了当前行后,失去焦点的同时又要重新判断奇偶或特殊等一系列的问题了
[/Quote]

选中了当前行,和奇偶没有绝对的关系

奇数行还是奇数行,偶数行还是偶数行。只有当总行数改变时,才会改变奇、偶数

选中了当前行,然后,再改选中其他行,可以在ROWCHANGE里做出判断
panda3033 2008-08-21
  • 打赏
  • 举报
回复
可不可以在dw中多设置一个变量
if (bianliang = 0,rgb(),rgb())用这个来设置第一行的颜色
然后只要第一次之后就设置这个变量为其他值
javaxi 2008-08-20
  • 打赏
  • 举报
回复
ribut9225的答案也是相当牵强,考虑不够全面。
要是被选中了当前行后,失去焦点的同时又要重新判断奇偶或特殊等一系列的问题了

ribut9225 2008-08-20
  • 打赏
  • 举报
回复
不如增加一列,是隐藏列
该隐藏列里,你可以根据需要设置字符:j(奇数行),o(偶数行),d(当前行),t(特列行)
然后在行背景色里写条件语句

if ( tj='j',rgb(x,x,x), if ( tj='o',rgb(x,x,x)..............)

然后,通过设置该隐藏列的值,就可以随意控制行背景色了
javaxi 2008-08-20
  • 打赏
  • 举报
回复
点击才生效代码。。。 好牵强的写法。。。要是刷新了dw又要做一系列的判断,挺麻烦的。
方法是可行,但,牵强。
foreveris 2008-08-19
  • 打赏
  • 举报
回复
我的意思是,你最初打开窗口时设置第一行(就是currentrow()默认的)的底色。而后你点击数据窗口时,你的函数就生效了。其它行的不用动。是不是可以达到你的目的?
javaxi 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 foreveris 的回复:]
引用 15 楼 javaxi 的回复:
引用 14 楼 foreveris 的回复:
if (getrow() = currentrow(),getrow(),0 )这样就可以了

经测试,用Evaluate检验,默认打开窗口时,currentrow()=1


你可以在初始化时,强行设置底色,而后使用我的方法。
[/Quote]

我判断的内容比较复杂的,奇数行、偶数行、当前行、特殊行、所有颜色都不同的,都写在background底色中写函数。
所以,强行设置底色不是办法。。。
foreveris 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 javaxi 的回复:]
引用 14 楼 foreveris 的回复:
if (getrow() = currentrow(),getrow(),0 )这样就可以了

经测试,用Evaluate检验,默认打开窗口时,currentrow()=1
[/Quote]

你可以在初始化时,强行设置底色,而后使用我的方法。
wedding123 2008-08-19
  • 打赏
  • 举报
回复
楼主的目的是什么呢?要先考虑是否非要用getrow=0来实现你的目的
javaxi 2008-08-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 foreveris 的回复:]
if (getrow() = currentrow(),getrow(),0 )这样就可以了
[/Quote]
经测试,用Evaluate检验,默认打开窗口时,currentrow()=1
foreveris 2008-08-19
  • 打赏
  • 举报
回复
if (getrow() = currentrow(),getrow(),0 )这样就可以了
javaxi 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lllyyymmm 的回复:]
用selectrow(1,false)
[/Quote]
经测试,不行。
这个理论我知道的,selectrow和setrow是完全不同概念的。
china_chengl 2008-08-08
  • 打赏
  • 举报
回复
ScrollToRow()
getrow()试下
javaxi 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 rightyeah 的回复:]
引用 4 楼 zzc0527 的回复:
是不是只有在rowcount()=0的情况下,才会得到0呢
貌似是的
[/Quote]
如果真的如此,那dw就有这么一缺陷了,默认getrow不应该是1的,应该是0才符合逻辑
rightyeah 2008-08-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zzc0527 的回复:]
是不是只有在rowcount()=0的情况下,才会得到0呢
[/Quote]貌似是的
加载更多回复(9)
当数据存在主次表时,当更新了次表数据后,主表数据在后台有更变时。可利用刷新主表当前行的方法重显主表数据。 /************************************************************ 函数名称: f_refresh_currentrow(adw) 功 能: 刷新DW当前行数据,不可刷新NO update or 带arguments的DW 参数说明: adw 目标DW 返 回 值: integer 成功返回1,失败返回-1 作 者: sean 创建时间: 2010年8月18日 ************************************************************/ string ls_dataobject string ls_keys[] //key Column Name string ls_dbname[] //key field Name string ls_coltype[] //field style string ls_tablenm //table name string ls_condition //sql Condition long ll_currentrow //Current Row numeric long ll_column //Column count integer i datawindow ldw datastore ldatastore ldw=adw if ldw.rowcount( )=0 then return -1 elseif trim(ldw.describe( "datawindow.table.arguments"))<>'?' then messagebox('','刷新数据窗口当前行失败!,数据窗口需要参数',exclamation!) return -1 else ll_currentrow=ldw.getrow( ) FOR ll_column = 1 TO long(ldw.object.datawindow.column.count)//key names If ldw.Describe("#"+string(ll_column)+".key") ='yes' Then i++ ls_keys[i]=ldw.Describe("#"+string(ll_column)+".name") ls_dbname[i]=ldw.Describe("#"+string(ll_column)+".dbname") ls_coltype[i]=ldw.Describe("#"+string(ll_column)+".coltype") End If NEXT if upperbound(ls_keys[])=0 then messagebox('','刷新数据窗口当前行失败!,没有主键',exclamation!) return -1 else ls_tablenm=left(ls_dbname[1],pos(ls_dbname[1],'.') -1) //table name for i=1 to upperbound(ls_keys[]) if pos('numb,deci,long,',LeftA(ls_coltype[i],4) +',')>0 then ls_condition+="and "+ls_dbname[i]+"="+string(f_getitem(ldw,ll_currentrow,ls_keys[i])) else ls_condition+="and "+ls_dbname[i]+"='"+string(f_getitem(ldw,ll_currentrow,ls_keys[i]))+"'" end if next ls_condition=mid(ls_condition,4) //sql Condition ldatastore=create datastore ldatastore.dataobject=ldw.dataobject ldatastore.settransobject( sqlca) if f_addwhere_retrieve(ldatastore,ls_condition)=1 then if ldatastore.rowcount( )=1 then ldw.object.data[ll_currentrow]=ldatastore.object.data[1] ldw.setitemstatus( ll_currentrow, 0, primary!, NotModified!) //if ldw.getrow( )<>ll_currentrow then ldw.scrolltorow( ll_currentrow) end if else messagebox('','刷新数据窗口当前行失败!,条件语法错误',exclamation!) return -1 end if destroy ldatastore end if end if

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧