Как я могу программно редактировать поле в произвольной строке в datagrid livecode?

Я работаю над проектом LiveCode, который отображает модал с таблицей DataGrid.

Если пользователь выбирает одну или несколько строк в DataGrid и нажимает кнопку OK, выбранные строки копируются в другую таблицу DataGrid в другом стеке.

Я хочу открыть поле редактирования в первой из скопированных строк в другом стеке.

Я нашел команду EditFieldText, но не смог выяснить, что предоставить в качестве первого параметра (pField).

Я предполагаю, что другими параметрами (pIndex и pKey) являются индекс строки DataGrid и имя столбца соответственно.

Это код в моей кнопке OK:

on mouseUp
   lock screen
   put the dgHiLitedLines of group selectComponentGrid into rowNumbers
   put the dgData of group selectComponentGrid into rows
   put true into firstTime
   repeat for each item rowNumber in rowNumbers
      put rows[rowNumber] into row 
      dispatch "AddData" to group bomGrid of card inventoryItem of stack inventory with row
      if firstTime is true then
         # Set focus to this row's quantity field.
         put "quantity" into colName
         put the result into lineNo -- the result contains the index of the new row
         send "EditCellOfIndex colName lineNo" to group bomGrid on card "inventoryItem" of stack "inventory"
         # At this point the result contains "no control exists for index column"
         put false into firstTime
      end if
      #end if
   end repeat
   unlock screen
   close this stack
end mouseUp

Я потратил несколько часов на чтение документации LiveCode и поиск. Я нашел много статей, но не объяснил, как это сделать.

Я использую LiveCode 9.0.0-dp-4|Build 15003 Community Edition на Mac OS X 10.11.6.

Edit 2017-01-17 13:23:
Я нашел команду EditCellOfIndex, изменил свой код, чтобы использовать его на основе различных примеров, которые я нашел, и также не имел успеха с ним.
Я обновил код выше, чтобы отразить изменения, которые я сделал.

1 ответ

  1. Все дело в синтаксисе (я все еще привыкаю к синтаксису LiveCode).
    Я использовал неправильный синтаксис для сообщения EditCellOfIndex.

    Мне также нужно было переместить отправку сообщения из цикла добавления строк в другой DataGrid, потому что следующее добавление закрывает поле phantom edit.

    Благодаря sritcp на форумах LiveCode для синтаксиса catch.
    Вот функциональный код:

    on mouseUp
       lock screen
       put empty into lineNo
       put the dgHiLitedLines of group selectComponentGrid into rowNumbers
       put the dgData of group selectComponentGrid into rows
       repeat for each item rowNumber in rowNumbers
          put rows[rowNumber] into row
          Dispatch "AddData" to group bomGrid of card inventoryItem of stack inventory with row
          if lineNo is empty then
             put the result into lineNo
          end if
       end repeat
       if lineNo is not empty then
          # Set focus to the first new row's quantity field.
          dispatch "EditCellOfIndex" \
                to group bomGrid on card "inventoryItem" of stack "inventory" \
                with "quantity", lineNo
       end if
       unlock screen
       close this stack
    end mouseUp