2009-04-07 1 views
1

Это длинный шанс, что любой может помочь с этим, но здесь идет. Я унаследовал приложение VB6 с элементом управления Janus GridEX. Он выполняет итерацию через записи и редактируется. Проблема в том, что если я отредактирую ячейку и нажмите кнопку, чтобы перейти к следующей записи, это изменение будет применено к следующей записи, а не той, которую я редактировал. Это похоже на то, что мне нужно, чтобы закончить редактирование, прежде чем перейти к следующей записи. У меня была такая проблема, прежде чем в VC++, а иногда вы должны «KillFocus» на элементе управления, в котором вы находитесь, или что-то в этом роде. Я просто не знаю, что делать здесь. Я попытался отправить возврат каретки, так как если вы вернетесь из ячейки редактирования, это будет работать, но отправка возврата каретки вручную не сработает. В чем секрет?Janus GridEX Задача

ответ

1

Это зависит от того, является ли кнопка внутренней для Janus GridEX или нет. Если это внутреннее, то только о единственном, что вы можете сделать, это посмотреть на события, которые элемент управления предоставляет, чтобы увидеть, есть ли последовательность, которая может сообщить вам, что эта проблема возникает. Затем вы можете попытаться предпринять корректирующие действия, восстановив строку, в которую вы переместили, и поместите редактирование в оставшуюся строку.

Если кнопка является внешней для Janus, вы можете использовать режим отладки для отслеживания последовательности операторов, которые управляют передачей фокуса в следующую строку. Это может быть что-то не в порядке или побочный эффект конкретной последовательности команд. Я столкнулся с обоими элементами управления.

Помните, что вы можете редактировать в режиме отладки, чтобы вы могли попробовать разные подходы и протестировать, пока не найдете тот, который работает.

2

Является ли ваша сетка связанной или несвязанной?

Трудно сказать из вашего описания, но я полагаю, что если у вас есть эта проблема, то это, вероятно, связано.

Как еще один ответ спросил, является ли кнопка RecordNavigator, встроенная в элемент управления, или это отдельная кнопка? Причина, по которой я это повторю, заключается в том, что я видел проблемы в приложениях VB6, которые я поддерживаю, когда панель инструментов часто перехватывает и мешает работе JanusGrid.

Чтобы обойти это ограничение, я добавил следующий код в обработчик кликов на любых панелях инструментов, где также есть элемент управления JanusGrid.

Если jsgxYourGridName.EditMode = jgexEditModeOn Тогда jsgxYourGridName.Update

Таким образом, любые изменения немедленно применяются к текущей строке.

Если это не помогает, то я также видел проблемы, когда набор записей, привязанный к сетке, не синхронизируется с внутренним набором записей в сетке. Вы можете проверить это, сравнив закладку сетки с закладкой набора записей.

Т.е. mrsYourRecordset.Bookmark = jsgxYourGrid.ADORecordset.Bookmark

В какой-то момент я, возможно, также использовал что-то вроде этого.

jsgxYourGrid.ADORecordset.Bookmark = jsgxYourGrid.RowBookmark(jsgxYourGrid.RowIndex(jsgxYourGrid.Row)) 

Наконец, вы можете попробовать установить контрольную точку в BeforeUpdate, RowColChange и/или AfterColUpdate событий сетки, чтобы увидеть, что запись сетки действительно на при нажатии на кнопку.