Das geht über ALV-Styles:vwaadenm hat geschrieben:Frage: Wie kann man einzelne Felder einzelner Spalten nicht/eingabebereit machen?
Code: Alles auswählen.
*Beispiel für ALV-OO, sollte auch für REUSE_ALV_GRID_DISPLAY_LVC gehen
* wies mit REUSE_ALV_GRID_DISPLAY geht keine Ahnung
*--- Internal table holding list data
DATA BEGIN OF gt_list OCCURS 0 .
INCLUDE STRUCTURE SFLIGHT . "Deine ALV-Daten
DATA cellstyles TYPE lvc_t_styl. "Tabelle die die Editierbarkeit steuert
DATA END OF gt_list .
* Dem ALV mitteilen in welchem Feld die Infos zur Editierbarkeit stecken
ps_layout-stylefname = 'CELLSTYLES'
* Hier die tiefe Tabelle mit den Editierstyles füllen.
FORM adjust_editables USING pt_list LIKE gt_list[] .
DATA ls_listrow LIKE LINE OF pt_list .
DATA ls_stylerow TYPE lvc_s_styl .
DATA lt_styletab TYPE lvc_t_styl .
LOOP AT pt_list INTO ls_listrow .
IF ls_listrow-carrid = 'XY' .
ls_stylerow-fieldname = 'SEATSMAX' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_disabled . "nicht Eingabebereit
APPEND ls_stylerow TO lt_styletab .
ENDIF .
IF ls_listrow-connid = '02' .
ls_stylerow-fieldname = 'PLANETYPE' .
ls_stylerow-style = cl_gui_alv_grid=>mc_style_enabled ."Eingabebereit
APPEND ls_stylerow TO lt_styletab .
ENDIF .
INSERT LINES OF lt_styletab INTO ls_listrow-cellstyles .
MODIFY pt_list FROM ls_listrow .
ENDLOOP .
ENDFORM .
wie muss das deklariert werden? Im Type-Pool SLIS habe ich keine Definition gefunden* Dem ALV mitteilen in welchem Feld die Infos zur Editierbarkeit stecken
ps_layout-stylefname = 'CELLSTYLES'
bisher nutze ich letzteres, ich baue also um auf den FB *LVC*Beispiel für ALV-OO, sollte auch für REUSE_ALV_GRID_DISPLAY_LVC gehen
* wies mit REUSE_ALV_GRID_DISPLAY geht keine Ahnung
So schwer ist es auch nicht, meine Vorlage war anscheinend zu wenig, hier mal ein Testreport:vwaadenm hat geschrieben:Scheint ja nicht sooo einfach zu sein - ich hatte es mir jedenfalls leichter vorgestellt )
Code: Alles auswählen.
REPORT ztest NO STANDARD PAGE HEADING.
TYPES: BEGIN OF t_data,
text TYPE c LENGTH 100,
num TYPE sy-tabix,
cellstyles TYPE lvc_t_styl,
END OF t_data.
DATA: gt_data TYPE TABLE OF t_data,
gw_data TYPE t_data.
DATA: gw_stylerow TYPE lvc_s_styl.
DATA: gs_layout TYPE lvc_s_layo,
gt_fcat TYPE LVC_T_FCAT,
gw_fcat TYPE LVC_S_FCAT.
DATA: g_rest TYPE i.
* SELSCREEN
PARAMETERS: p_text(80) TYPE c OBLIGATORY,
p_anzahl TYPE i OBLIGATORY DEFAULT 10.
START-OF-SELECTION.
* Daten lesen
DO p_anzahl TIMES.
gw_data-text = p_text.
gw_data-num = sy-tabix.
APPEND gw_data TO gt_data.
ENDDO.
* Stylestabelle füllen
LOOP AT gt_data INTO gw_data.
* Der Text ist nie eingabebereit
gw_stylerow-fieldname = 'TEXT'.
gw_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT gw_stylerow INTO TABLE gw_data-cellstyles.
* Nur die Zellen eingabebreit machen, die glat durch 5 teilbar sind.
gw_stylerow-fieldname = 'NUM'.
g_rest = gw_data-num MOD 5.
IF g_rest = 0.
gw_stylerow-style = cl_gui_alv_grid=>mc_style_enabled.
ELSE.
gw_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
ENDIF.
INSERT gw_stylerow INTO TABLE gw_data-cellstyles.
* Stylestabelle übernehmen
MODIFY gt_data FROM gw_data.
ENDLOOP.
* Layout über Styles informieren
gs_layout-stylefname = 'CELLSTYLES'.
* Feldkatalog, sehr einfach
gw_fcat-fieldname = 'TEXT'.
APPEND gw_fcat TO gt_fcat.
gw_fcat-fieldname = 'NUM'.
gw_fcat-edit = 'X'.
APPEND gw_fcat TO gt_fcat.
* ALV rufen
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
is_layout_lvc = gs_layout
IT_FIELDCAT_LVC = gt_fcat
TABLES
t_outtab = gt_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
* Schlechtes Fehlerhandling
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Hatte das Problem zwar selber nocht nicht, aber dass sollte auch per ALV-Style lösbar sein. Das Atribute MC_STYLE_F4_NO aus der Klasse CL_GUI_ALV_GRID hört sich gut an.john.duke hat geschrieben: Hat viell. von euch jemand Ahnung, warum die F4-Auswahl trotz nicht-eingabebereitschaft funktioniert bzw. wie ich das beheben kann???
... habe momentan das gleich Problem, hat da mittlerweile jemand eine Lösung gefunden?
Code: Alles auswählen.
gw_stylerow-style = cl_gui_alv_grid=>mc_style_disabled +
cl_gui_alv_grid=>mc_style_f4_no.