hur.cn - 华软网

 热门搜索

怎样得到子数据窗口中所选行的行号?

  作者:未知    来源:网络    更新时间:2019/5/10
数据窗口dw_1的字段 name,在name上有一个子数据窗口,

数据窗口的字段:

名称     价格

a        10

a        20

a        30

------------------------------------------------

我想获得子数据窗口所选行的行号,然则获得的总是1,该怎么解决呢???

------华软网友回答------
datawindowchild ldwc_1
dw_1.getchild("子数据所在列的名称",ldwc_1)
long ll_row
ll_row = ldwc_1.GetRow(0)
------华软网友回复------
datawindowchild ldwc_1
dw_1.getchild("子数据所在列的名称",ldwc_1)
long ll_row
ll_row = ldwc_1.GetRow()
------华软网友回复------
datawindowchild ldwc_1
dw_1.getchild("name",ldwc_1)
long ll_row
ll_row = ldwc_1.GetRow()

------华软网友回复------
sdhylj(青锋-SS)

ll_row = ldwc_1.GetRow(0)

毛病的参数getrow()
------华软网友回复------
你把0去掉,按我第二次的写法。
------华软网友回复------
就是这个:
datawindowchild ldwc_1
dw_1.getchild("name",ldwc_1)
long ll_row
ll_row = ldwc_1.GetRow()

------华软网友回复------
sdhylj(青锋-SS)
-----------------------------------------------
我是在dw_1的itemchanged事件里写这段程序的,然则不能接连选择

比如:我第一次选择了 a   10这一行,能够获得行号1,我再选第二行 a   20就什么都没有了

这是怎么回事?

datawindowchild ldwc_1
dw_1.getchild("name",ldwc_1)
long ll_row
ll_row = ldwc_1.GetRow()
messagebox("",string(ll_row))


------华软网友回复------
是否是由于子数据窗口的"名称"列的数据都是重复的缘故啊,然则由于相同的名称有不同的价格
所以都得列出来.

该怎样解决的?
------华软网友回复------
我适才试了一下,能够的。
如果名称重复的话就会有问题,PB在这方面措置惩罚的欠好,在名称重复的情况下,一直只有第一个名称被选择,即使你选中的是它后面的。

------华软网友回复------
没有什么好措施措置惩罚这事。
用子数据窗口,能够显示主键,下拉是显示相关信息,不过这样不方便且只适合有一个主键的情况。
------华软网友回复------
sdhylj(青锋-SS) 
-------------------------------------------
有没有其余的措施能够做到呢,我试着用find函数也不行,只需有重复值就不行
------华软网友回复------
find也有这样的问题。我也没措施措置惩罚这些,跟PB内部实现体制有关。
------华软网友回复------
sdhylj(青锋-SS) 
-----------------------------------------------
可不能够合并数据列,把名称与单价字段合并在一起

例如: a 10
      a 20
      a 30
这样是否是就没问题了,该怎样合并呢?
------华软网友回复------
奇怪了:

计算列设置了compute_1(名称+单价)

display value 为compute_1, data value 为名称

可是照旧得不到行号.怎么回事?

------华软网友回复------
子数据窗口中把名称和单价的列去掉,只显示计算列,然后在dw_1中设置name列的属性,data value 及display value
------华软网友回复------
这样应该能保证值唯一
------华软网友回复------
sdhylj(青锋-SS) 
-----------------------------------

照旧不行,预计这是PB自身的问题,没法解决了.
------华软网友回复------
能够按你说的方法措置惩罚,以下:
如果name列的下拉数据窗口是d_namelist,对应的数据库中表为table1(pk_1,name,price)
修改d_namelist,使其数据源的SQL语句为:select pk_1,rtrim(name)+ltrim(cast(price as char)) as dispcol from table1
然后设置dw_1中name列的edit属性即可.
------华软网友回复------
在PB的数据窗口中,如何捕捉dropdowndw列的上下键事件



In Reply to: 在PB的数据窗口中,如何捕捉dropdowndw列的上下键事件! 

■ DDDW 事件概述

⒈所有对DDDW的操作都通过触发pbm_command事件完成

① 在PB的用户事件中,大多数事件对应的Windows 事件都有两个参数:lparam 和 wparam,而在PB5.0中,pbm_command没有参数,但能够通过message对象的两个属性取得Windows事件对应的Event ID,这两个属性就是: LongParm 和 WordParm。

LongParm 包括DDDW的Handle,用intLow()可取得其Handle

WordParm 包括对DDDW的操作,用intHigh()可取得其Event ID

② 在PB6.0(^)中,pbm_command带3个参数,其中hwndchild(long)与notificationcode(unsignedinteger)即DDDW的Handle和Event ID。

⒉DDDW 的Event ID 列表:

Event Event ID

-------------------------------

Clicked 1281

RowFocusChanged 2048

RightMouseButtonDown 2314

Left Button Up 2313

Retreive End 769

MouseMove 2311

... 

至于问题中的上下滚动,倘为键盘,将致使行焦点改变(此外,还致使一个ID = 2049的事件):

RowFocusChanged 2048


倘为鼠标点击滚动条上下按钮:

PageUp/PageDown 2339


⒊根据上述列表,就能够在 pbm_command 事件中判断对DDDW做了何种操作:


DataWindowChild ldwc_Child


GetChild( "Column", ldwc_Child )


IF IntLow( Message.Longparm ) = Handle( ldwc_Child ) THEN 

CHOOSE CASE IntHigh( Message.Wordparm )

CASE 2048 // RowFocusChanged on DDDW

CASE 1281 // Clicked

CASE 2314 // Right Mouse Button Clicked

CASE 2311 // MouseMove

END CHOOSE

END IF
------华软网友回复------
学习
------华软网友回复------
DataWindowChild ldwc_child

dw_1.SetFocus()
dw_1.GetChild("name",ldwc_child)
ldwc_child.SetTransObject(Sqlca)

dw_1.SetColumn("name")

MessageBox("1",ldwc_child.GetRow())      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。