powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Как запустить ItemChanged для произвольной строки?
18 сообщений из 18, страница 1 из 1
Как запустить ItemChanged для произвольной строки?
    #34058738
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 при этом не отрабатывает.
Спрашивается, что делать? Как заставить отработать событие 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
Как запустить ItemChanged для произвольной строки?
    #34058771
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как запустить ItemChanged для произвольной строки?
    #34058803
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФилиппПо какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?А какая разница, пользователь менял или не пользователь? Менялось же! Значит должно отрабатывать событие.

ФилиппВообще говоря - безобразие делать подобные вещи из другого окна, тем не менее, типа:
Код: 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
Как запустить ItemChanged для произвольной строки?
    #34058850
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl ФилиппПо какой-такой непонятной? С чего он будет срабатывать? Пользователь разве что-нибудь поменял?А какая разница, пользователь менял или не пользователь? Менялось же! Значит должно отрабатывать событие.
Исключительно у вас в голове. В PowerBuildere - НЕ ДОЛЖНО.
...
Рейтинг: 0 / 0
Как запустить ItemChanged для произвольной строки?
    #34058861
Andyn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как запустить ItemChanged для произвольной строки?
    #34061490
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndynТо есть событие произойдет когда пользователь ручками изменил значение в DW и пошел дальше, а не когда что-то меняется из скрипта.Ок, раз задокументировано, значит опаньки :)
А есть у нас какое-нибудь подобное событие, но не требующее потери фокуса? Или просто чтоб на SetItem реагировало?
...
Рейтинг: 0 / 0
Как запустить ItemChanged для произвольной строки?
    #34061604
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создать событие OnSetItem( <параметры> )
перегрузить функцию datawindow SetItem( <параметры> ):
Код: plaintext
1.
2.
3.
int li_Ancestor_Result
li_Ancestor_Result = super::SetItem( <параметры> )
event OnSetItem( <параметры> )
соответственно, наверное, придется SetItemString, SetItemDate ... перегрузить.
Честно говоря, ни разу такие вещи не понадобились.
...
Рейтинг: 0 / 0
Как запустить ItemChanged для произвольной строки?
    #34061608
Фотография ИвановНН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее
Код: plaintext
1.
2.
3.
int li_Ancestor_Result
li_Ancestor_Result = super::SetItem( <параметры> )
event OnSetItem( <параметры> )
return li_Ancestor_Result
...
Рейтинг: 0 / 0
Как запустить ItemChanged для произвольной строки?
    #34064249
edmikeca
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и проще:

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

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

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

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

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

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

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

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

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

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


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