2012-06-04 4 views
1

Я заполняю DataWindow некоторыми данными. Некоторыми именами столбцов являются «Request No», «Status» и т. Д.Как обрабатывать DataWindow в PowerBuilder

Столбец «Статус» может содержать такие значения, как «Ожидание», «Актив», «Истек».

Когда заполняется DataWindow, я хочу подсчитать количество записей в PowerBuilder, которые имеют статус «Активный».

После получения счета записей я буду заполнять счет в каком-то статическом тексте.

Может ли кто-нибудь помочь мне, как этого достичь, поскольку я новичок в PowerBuilder.

Благодаря

ответ

4

Это поможет вам ваш ответ, но он вводит вас к тому, что мы PowerBuilder разработчики знают, как «Тильда Hell».

ll_Count = Long (dw.Describe ("Evaluate('sum (if((status = ~~~"Active~~~"),1,0))',1)")) 

Тильда-сумасшествие должно делать с тем, что каждый уровень оценки строк кипятит выражение вниз для следующей оценки. (~~ сводится к ~ и ~ «сводится к тому,» что полезно, если ваша строка заключена в двойные кавычки)

Evaluate(<expression>, <row>) внутри Describe() возвратит значение для <expression> на данной строке. (Так как <row> не имеет отношения к операции sum(), которая работает по всему набору данных, все, что вам нужно сделать, это убедиться, что это допустимая строка, то есть в этом примере есть, по крайней мере, одна строка.)

Удачи ,

Terry.

+0

Спасибо Терри. Он отлично работал. –

+1

Не мог ли он также выразить это выражение - sum (if ((status = «Active»), 1,0)) - в скрытое вычисленное поле в своем окне данных и затем оценить это скрытое поле? Могло бы упасть на тильды. – Slapout

+0

Моя первая реакция не была, потому что она будет оцениваться чаще, чем вы хотите (например, каждый раз, когда вы прокручиваете), что делает ее неэффективной. Кроме того, если вы хотите сделать PowerBuilder, вам нужно научиться любить тильду. Но теперь моя реакция - нет, потому что ее нельзя скрывать; это должно быть в нижнем колонтитуле, заменяющем статический текст. Мне нравится это решение еще лучше. – Terry

3

Одно из решений для фильтрации данных DW, используя ваши критерии, то, чтобы получить подсчитывать строки.

Что-то вроде:

dw_ctrl.SetFilter("status='Active'") 
dw_ctrl.Filter() 
ll_count = dw_ctrl.RowCount() 
//... 
//don't forget to reset filter after that 
dw_ctrl.SetFilter("") 
dw_ctrl.Filter() 
+0

Это решение работает также, я бы, вероятно, использовал вычисленное поле, указанное Slapout. Если вы использовали это, сначала может быть полезно установить SetRedraw (false), а затем SetRedraw (true) после управления вашим окном datawindow, чтобы избежать мерцания. –

Смежные вопросы