2

我在我的窗口中创建了一个下拉列表框 (DDLB)(我使用的是 PowerBuilder 10.5)。一旦我调用我的函数,DDLB 就会填满我表中所有不同的城市。这是我使用的代码:

FOR li_i=1 TO ii_br_red
ls_city = dw_city.GetItemString(li_i, 'city')
IF ddlb_city.FindItem(ls_city, 1) = -1 THEN 
ddlb_city.AddItem(ls_city) END IF; NEXT

代码的下一部分在 ddlb "selectionchanged" 事件中......

 dw_city.SetFilter("city = '" + this.text + "'")
 dw_city.Filter()

这很好用,在调用我的函数(通过单击命令按钮)后,我会得到我表中所有不同城市的列表,例如。

Paris
London
New York
Washington

没有城镇会被两次列出。我现在需要做的是在我的 DDLB 中的每个城市旁边添加一个国家/地区。所以在点击我的命令按钮后,我会在我的 DDLB 中得到这个:

Paris (France)
London (GB)
New York (USA)
Washington (USA)

有什么建议吗?提前致谢...

第二个问题,类似于这个主题:我有一个 SQL 代码:

SELECT distinct name FROM table1;

这给了我8个不同的名字。我想要做的是用这些名称填充另一个 DDLB,ddlb_1,但这必须发生在我的程序的打开事件中。这是我在我的程序的开放事件中写的:

string ls_name
SELECT distinct name INTO :ls_name FROM tabel1;
ddlb_1.AddItem(ls_name)

但这只是给了我名字。我猜我需要某种计数,但我就是无法完成。

4

5 回答 5

2

如果您不想更改程序的设计,并且当您声明该国家/地区在同一个 DW 中时,您可以稍微破解代码以将国家/地区添加到 ddlb(我想该国家/地区在dw的同一行):

String ls_country
FOR li_i=1 TO ii_br_red
    ls_city = dw_city.GetItemString(li_i, 'city')
    IF ddlb_city.FindItem(ls_city, 1) = -1 THEN 
        ls_country = dw_city.GetItemString(li_i, 'country')
        ddlb_city.AddItem(ls_city + ' (' + ls_country + ')')
    END IF
NEXT

在过滤 DW 的事件中取回值的快速而肮脏的黑客将是

int p
string ls_city

ls_city = this.text
p = pos(ls_city, '(')
if p > 0 then ls_city = left(ls_city, p - 2) //skip the "space + (country)" part
dw_city.SetFilter("city = '" + ls_city + "'")
dw_city.Filter()

但是这种代码很难维护,应该用别的东西代替,因为城市值的处理与它在列表中的表示是强耦合的。

更好的解决方案是 dropdowndatawindow,或者(更糟糕的)城市名称数组,其中 ddlb 中城市 + 国家的索引将对应于适合过滤 DW 的裸城市名称的索引

于 2013-06-14T14:58:45.657 回答
0

为了回答我自己的第二个问题,这就是我最终完成的方式......

String ls_name
DECLARE xy CURSOR FOR
SELECT distinct name FROM table1;
OPEN xy;
FETCH xy INTO :ls_name;
do until sqlca.sqlcode <> 0
ddlb_1.AddItem(ls_name);
FETCH xyINTO :ls_name;
loop
CLOSE xy;
于 2013-07-16T09:45:59.173 回答
0

我认为你应该修改“源”数据窗口的选择,你应该得到你想要的最终结果,你只需要将数据从数据窗口复制到 ddlb。您应该在 select 中使用 distinct ,如下所示:

select distinct city + ' (' + country_code + ')' from cities_and_countries_table

当然,您应该将“city”、“country_code”替换为表中的实际列名以及表名。这样,您将只获得每个城市一次,并且它们已经与国家代码连接。

兄弟。加博尔

于 2013-06-14T14:08:08.383 回答
0

它真的必须是DDLB吗?我会给用户一个城市名称的单行编辑,并在用户键入时过滤 DW。

于 2013-06-14T14:18:28.377 回答
0

我是 PowerBuilder 的新手,但我只是使用了那种场景,但是我使用了 DDW(下拉数据窗口)而不是列表框在这种情况下,您可以在 DW 获得后立即显示多个列焦点,您将能够动态填充数据。试试看。它对我有用,当你刚开始时(就像我的情况一样),DW 会让人头疼,但你可以用它做很多事情

于 2013-09-06T22:02:47.813 回答