Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как запустить ItemChanged для произвольной строки? / 18 сообщений из 18, страница 1 из 1
16.10.2006, 23:55
    #34058738
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
В win_1.dw_1 объявлен достаточно навроченый ItemChanged.
Из друго окна делаю замену нескольких полей в разных строках, что-то в духе:
Код: plaintext
1.
win_1.dw_1.SetItem(iRow, 'F1', NewValue)
win_1.dw_1.SetItem(iOtherRow, 'F2', OtherValue)
По непонятной для меня причине ItemChanged при этом не отрабатывает.
Спрашивается, что делать? Как заставить отработать событие win_1.dw_1.itemchanged() для iRow и iOtherRow.

В принципе идеально отрабатывает код типа такого:
Код: plaintext
1.
2.
3.
4.
win_1.dw_1.SetRow(iRow)
win_1.dw_1.SetColumn('F1')
win_1.dw_1.SetText(NewValue)
win_1.dw_1.AcceptText()
// повторить для всех строк и полей которые надо менять
Но не хотелось бы двигать фокус в принимающем dw.

---
http://www.rusug.ru] Портал русскоязычной группы пользователей Sybase
...
Рейтинг: 0 / 0
17.10.2006, 00:34
    #34058771
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
White OwlВ win_1.dw_1 объявлен достаточно навроченый ItemChanged.
Из друго окна делаю замену нескольких полей в разных строках, что-то в духе:
Код: plaintext
1.
win_1.dw_1.SetItem(iRow, 'F1', NewValue)
win_1.dw_1.SetItem(iOtherRow, 'F2', OtherValue)
По непонятной для меня причине ItemChanged при этом не отрабатывает.
По какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?
Вообще говоря - безобразие делать подобные вещи из другого окна, тем не менее, типа:
Код: plaintext
1.
2.
dwobject ldwo
ldwo = win_1.dw_1.F1
win_1.dw_1.event Itemchanged(row, ldwo , NewValue)
...
Рейтинг: 0 / 0
17.10.2006, 02:02
    #34058803
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
ФилиппПо какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?А какая разница, пользователь менял или не пользователь? Менялось же! Значит должно отрабатывать событие.

ФилиппВообще говоря - безобразие делать подобные вещи из другого окна, тем не менее, типа:
Код: plaintext
1.
2.
dwobject ldwo
ldwo = win_1.dw_1.F1
win_1.dw_1.event Itemchanged(row, ldwo , NewValue)

Спасибо, только не работает :)
.....
ааа! Работает. Только dwobject надо брать так:
Код: plaintext
ldwo = win_1.dw_1.object.F1
...
Рейтинг: 0 / 0
17.10.2006, 06:36
    #34058850
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
White Owl ФилиппПо какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?А какая разница, пользователь менял или не пользователь? Менялось же! Значит должно отрабатывать событие.
Исключительно у вас в голове. В PowerBuildere - НЕ ДОЛЖНО.
...
Рейтинг: 0 / 0
17.10.2006, 06:54
    #34058861
Andyn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
White Owl ФилиппПо какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?А какая разница, пользователь менял или не пользователь? Менялось же! Значит должно отрабатывать событие.
Товарисч! Внимательнее изучайте матчасть! :)
PB Help
ItemChanged event (DataWindows)

Description

Occurs when a field in a DataWindow control has been modified and loses focus (for example, the user presses enter, the tab key, or an arrow key or clicks the mouse on another field within the DataWindow). It occurs before the change is applied to the item. ItemChanged can also occur when the AcceptText or Update function is called for a DataWindow control or DataStore object.
То есть событие произойдет когда пользователь ручками изменил значение в DW и пошел дальше, а не когда что-то меняется из скрипта.
...
Рейтинг: 0 / 0
17.10.2006, 18:42
    #34061490
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
AndynТо есть событие произойдет когда пользователь ручками изменил значение в DW и пошел дальше, а не когда что-то меняется из скрипта.Ок, раз задокументировано, значит опаньки :)
А есть у нас какое-нибудь подобное событие, но не требующее потери фокуса? Или просто чтоб на SetItem реагировало?
...
Рейтинг: 0 / 0
17.10.2006, 19:27
    #34061604
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
создать событие OnSetItem( <параметры> )
перегрузить функцию datawindow SetItem( <параметры> ):
Код: plaintext
1.
2.
3.
int li_Ancestor_Result
li_Ancestor_Result = super::SetItem( <параметры> )
event OnSetItem( <параметры> )
соответственно, наверное, придется SetItemString, SetItemDate ... перегрузить.
Честно говоря, ни разу такие вещи не понадобились.
...
Рейтинг: 0 / 0
17.10.2006, 19:29
    #34061608
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
вернее
Код: plaintext
1.
2.
3.
int li_Ancestor_Result
li_Ancestor_Result = super::SetItem( <параметры> )
event OnSetItem( <параметры> )
return li_Ancestor_Result
...
Рейтинг: 0 / 0
18.10.2006, 16:44
    #34064249
edmikeca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
Можно и проще:

dw.trigger event itemchanged(row, dw.object.column_name, value)
...
Рейтинг: 0 / 0
18.10.2006, 17:51
    #34064563
ИвановНН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
Проще чем что?
...
Рейтинг: 0 / 0
18.10.2006, 19:01
    #34064832
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
edmikecaМожно и проще:

dw.trigger event itemchanged(row, dw.object.column_name, value)

Не надо так делать!
Этим Вы меняете смысл этого события: в справке указано, что если из itemchanged вернуть 1 то изменения не будут приняты. А в Вашем случае это не так - изменения уже применены до входа в обработчик. И тот кто написал или напишет обработчик этого события (например в предке) будет долго отлавливать почему же возвращаемое itemchanged значение ни на что не влияет.
...
Рейтинг: 0 / 0
18.10.2006, 19:23
    #34064877
Локшин Марк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
Anatoly MoskovskyИ тот кто написал или напишет обработчик этого события (например в предке) будет долго отлавливать почему же возвращаемое itemchanged значение ни на что не влияет.
Ну это же можно и обработать при вызове itemchanged...
...
Рейтинг: 0 / 0
18.10.2006, 20:12
    #34064958
edmikeca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
2 Anatoly Moskovsky

Позволю усомниться в этом по одной простой причине. Я триггерую это событие (так как написано) и обработчик события все равно срабатывает. Фактически я устанавливаю новое значения и заставляю обработчик обработать его, что и происходит.
...
Рейтинг: 0 / 0
18.10.2006, 20:37
    #34064994
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
edmikeca2 Anatoly Moskovsky

Позволю усомниться в этом по одной простой причине. Я триггерую это событие (так как написано) и обработчик события все равно срабатывает. Фактически я устанавливаю новое значения и заставляю обработчик обработать его, что и происходит.

Anatoly Moskovsky прав.
itemchanged срабатывает при определенных условиях.
Вызов его "принудительно" это просто хак.
Вам просто лень выносить ваш обработчик в отдельную функцию которую можно было бы вызвать и из itemchanged и и после SetItem.

Если я возвращаю 1 из itemchanged - я ожидаю срабатывания itemerror.
Если я возвращаю 2 из itemchanged - я ожидаю что в column останется ПРЕЖНЕЕ значение.

Программистов которые сами вызывают itemchanged clicked у кнопок doubleclicked и т.п. вместо того чтобы привести свой код в порядок надо увольнять без выходного пособия.
...
Рейтинг: 0 / 0
18.10.2006, 20:44
    #34065001
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
ЗоринАндрейПрограммистов которые сами вызывают itemchanged clicked у кнопок doubleclicked и т.п. вместо того чтобы привести свой код в порядок надо увольнять без выходного пособия.Не совсем так. Увольнять надо тех кто пишет осмысленный код внутри itemchanged а не выносит его в функцию...
Впрочем, эти люди уже уволены :) Потому-то топик и появился :(
...
Рейтинг: 0 / 0
18.10.2006, 21:12
    #34065037
edmikeca
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
2 ЗоринАндрей

Обработчик у меня и так сидит в отдельной функции и вызывается из itemchanged. Честно говоря я не вижу в чем противоречие? Мне нужно что бы этот обработчик вызывался только из одного места itemchanged. И мне нужно быть уверенным что бы этот event вызывался не зависимо от того, что напечатает пользователь или я сам установлю новое значение в поле. Мне нужно проверить новое значение в любом случае. Посмотрите из-за чего начался топик.
Если у Вас другое видение, то пожалуйста объясните его. Учиться хорошему стилю программирования никогда не поздно!
...
Рейтинг: 0 / 0
18.10.2006, 21:26
    #34065060
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
edmikecaОбработчик у меня и так сидит в отдельной функции и вызывается из itemchanged. Честно говоря я не вижу в чем противоречие? Мне нужно что бы этот обработчик вызывался только из одного места itemchanged. И мне нужно быть уверенным что бы этот event вызывался не зависимо от того, что напечатает пользователь или я сам установлю новое значение в поле. Мне нужно проверить новое значение в любом случае.Если есть функция, надо звать функцию.
Дергать вручную событие - дурной тон всегда.

edmikecaПосмотрите из-за чего начался топик.Сказал бы я из-за чего начался этот топик. Да модератор не похвалит...
...
Рейтинг: 0 / 0
19.10.2006, 08:50
    #34065439
spas2001
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как запустить ItemChanged для произвольной строки?
Не надо злиться все когда-то начинали
Выработка стиля вопрос времени, опыта и желания
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как запустить ItemChanged для произвольной строки? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]