Posted: Fri Feb 08, 2008 11:52 am Post subject: Как программно выделить строки в Table Control?
Собственно весь вопрос сформулирован в названии топика. Есть желание реализовать функцию Select All/Deselect All для таблицы построенной на базе Table Contorl. Выделение всех позиций начинается с выделения одной позиции, так что хочеться знать как выделить строку таблицы программно?
В свойствах экранной таблицы ставишь ВыделСтолбц = Многокр., взводишь чекбокс "Со СцВыбора" и в поле напротив вписываешь имя столбца соответствующей внутренней таблицы с типом CHAR1. Кстати, такое поле должно быть в структуре вн.таблицы (чаще всего ему дают имя MARK). Значение этого поля, равное 'X' выделяет соответствующую строку на экране и наоборот, выделение строки на экране взводит поле в 'X'. Т.о. программно выделить все строки экранной таблицы, значит просто в цикле присвоить полю MARK значение 'X'. _________________ "/h" Стань хозяином судьбы!
В свойствах экранной таблицы ставишь ВыделСтолбц = Многокр., взводишь чекбокс "Со СцВыбора" и в поле напротив вписываешь имя столбца соответствующей внутренней таблицы с типом CHAR1. Кстати, такое поле должно быть в структуре вн.таблицы (чаще всего ему дают имя MARK). Значение этого поля, равное 'X' выделяет соответствующую строку на экране и наоборот, выделение строки на экране взводит поле в 'X'. Т.о. программно выделить все строки экранной таблицы, значит просто в цикле присвоить полю MARK значение 'X'.
Пробовал уже так, но подумал что это не правильно. После твоего поста убедился что направление мысли верное. Но не работает. Тогда приложу исходники:
Code:
REPORT ZTEST_TABLE .
CONTROLS flights TYPE TABLEVIEW USING SCREEN 100.
TABLES cosp.
DATA: ok_code TYPE sy-ucomm,
save_ok TYPE sy-ucomm.
DATA: itab TYPE TABLE OF ZTEST_STRUCT
, wa_itab LIKE LINE OF itab
, fill TYPE i
, wa_cols LIKE LINE OF flights-cols.
DATA: lines TYPE i,
limit TYPE i,
line TYPE i,
f TYPE i.
SELECT * FROM cosp INTO CORRESPONDING FIELDS OF TABLE itab.
MODULE fill_table_control OUTPUT.
READ TABLE itab INTO wa_itab INDEX flights-current_line.
ENDMODULE.
MODULE cancel INPUT.
LEAVE PROGRAM.
ENDMODULE.
MODULE read_table_control INPUT.
lines = sy-loopc.
MODIFY itab FROM wa_itab INDEX flights-current_line.
ENDMODULE.
MODULE user_command_0100 INPUT.
save_ok = ok_code.
CLEAR ok_code.
CASE save_ok.
WHEN 'NEXT_LINE'.
flights-top_line = flights-top_line + 1.
limit = fill - lines + 1.
IF flights-top_line > limit.
flights-top_line = limit.
ENDIF.
WHEN 'PREV_LINE'.
flights-top_line = flights-top_line - 1.
IF flights-top_line < 0.
flights-top_line = 0.
ENDIF.
WHEN 'NEXT_PAGE'.
flights-top_line = flights-top_line + lines.
limit = fill - lines + 1.
IF flights-top_line > limit.
flights-top_line = limit.
ENDIF.
WHEN 'PREV_PAGE'.
flights-top_line = flights-top_line - lines.
IF flights-top_line < 0.
flights-top_line = 0.
ENDIF.
WHEN 'LAST_PAGE'.
flights-top_line = fill - lines + 1.
WHEN 'FIRST_PAGE'.
flights-top_line = 0.
WHEN 'SELE'.
GET CURSOR LINE f.
line = flights-TOP_LINE + f - 1.
READ TABLE itab INTO wa_itab INDEX line.
wa_itab-MARK = 'X'.
MODIFY itab FROM wa_itab INDEX line.
ENDCASE.
ENDMODULE.
Экранная логика:
Code:
PROCESS BEFORE OUTPUT.
MODULE status_0100.
LOOP WITH CONTROL flights.
MODULE fill_table_control.
ENDLOOP.
PROCESS AFTER INPUT.
MODULE cancel AT EXIT-COMMAND.
LOOP WITH CONTROL flights.
MODULE read_table_control.
ENDLOOP.
MODULE user_command_0100.
внутренняя таблица Itab представляет собой таблицу cosp, поля которой выводиться в таблицу + поле MARK типа CHAR1. Соотвественно в ScreenPainter поле "Со СцВыбора" получило имя MARK. Не работает, и при выделении строки в таблице на экране внутренняя таблица этого не отображает.
ко второму часу я нашел ошибку. Поле в ScreenPainter надо было обозвать не MARK, а wa_itab-MARK, так как wa_itab - рабочая область таблицы. Глупость, но времени отняло.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.