Checkboxen einer ALV Grid abhängig machen

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
9 Beiträge • Seite 1 von 1
9 Beiträge Seite 1 von 1

Checkboxen einer ALV Grid abhängig machen

Beitrag von Meti (ForumUser / 5 / 1 / 0 ) »
Hallo,

für meine Projektarbeit muss ich in einen ALV_Grid entweder Test1 oder Test2 wählen dürfen. Ich habe eine Struktur 'Structure' angelegt, wo ich Test1 und Test2 mit den Typen BOOLE deklariere.
Ich gebe die zwei Spalten in einen ALV GRID als Checkboxen aus.

DATA fcat TYPE TABLE OF lvc_s_fcat .
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = 'Structure'
CHANGING
ct_fieldcat = fcat[].
FIELD-SYMBOLS <test> LIKE LINE OF fcat[].

LOOP AT fcat[] ASSIGNING <test>.
CASE <test>-fieldname.
WHEN 'TEST1'.
<test>-outputlen = '8'.
<test>-checkbox = 'X'.
<test>-edit = 'X'.
WHEN 'TEST2'.
<test>-outputlen = '7'.
<test>-checkbox = 'X'.
<test>-edit = 'X'.
WHEN OTHERS.
<test>-tech = true.
ENDCASE.
ENDLOOP.

Gibt es eine Möglichkeit, diese beiden Chackboxen in Abhängigkeit (oder Gruppe) zu setzten, dass wenn ich eine Checkbox anklicke (auf TRUE setze) den andere abgewählt wird (auf FALSE gesetzt wird.)


PS.
Es müssen keine Checkboxen sein, es könnten auch Radiobuttons sein. Aber mit:

<test>-checkbox = 'R'.

hat es leider auch nicht geklappt, da ich die RADIOBUTTONS nicht anklicken kann. :( :(

Vielen Dank für ihre Antworten im Voraus.

Gruß,
Meti
Zuletzt geändert von Meti am 09.10.2013 10:18, insgesamt 1-mal geändert.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Meti hat geschrieben:Gibt es eine Möglichkeit, diese beiden Chackboxen in Abhängigkeit (oder Gruppe) zu setzten, dass wenn ich eine Checkbox anklicke (uf TRUE setze) den andere abgewählt wird (auf FALSE gesetzt wird.)
Wenn du fcat-hotspot = 'X' setzt, löst jeder Klick auf die CheckBox ein Event aus. Auf das Event registrieren und im Ereignishandler deine Prüfung machen bzw. das Schalten der nicht geklickten Checkbox realiseren. Dann die ALV-Anzeige refreshen.
Meti hat geschrieben: Es müssen keine Checkboxen sein, es könnten auch Radiobuttons sein.
Radiobuttons gingen ebenfalls nur über HOTSPOT und interner Verarbeitung. Ich würde so etwas mit einer DropDownBox lösen. Damit spart man sich die ganzen Ereignishandler und die Daten müssen nicht immer zwischen Frontend und Backend hin und her geschoben werden.
Gruß Hendrik

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von Meti (ForumUser / 5 / 1 / 0 ) »
Hallo nochmals,

@JHM vielen Dank für die schnelle Antwort. Ich werde dies gleich ausprobieren.

Eine kleine Frage noch.
Wenn ich meine Checkboxen fcat-Hotspot = 'X' setze, kann ich die nicht anklicken, da ich zwei Checkboxen in zwei Spalten haben.

Danke im Voraus.

Gruß

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Meti hat geschrieben:Danke im Voraus.
rudimentäres Demo sollte helfen:

Code: Alles auswählen.

REPORT  zalv_cb.
TYPE-POOLS slis.

TYPES: BEGIN OF t_data,
         check1 TYPE c LENGTH 1,
         check2 TYPE c LENGTH 1,
       END   OF t_data.

DATA: gt_data TYPE TABLE OF t_data,
      gt_fcat TYPE          lvc_t_fcat,
      gs_fcat TYPE          lvc_s_fcat.


START-OF-SELECTION.

* Itab füllen
  DO 10 TIMES.
    APPEND INITIAL LINE TO gt_data.
  ENDDO.

* Fieldcat erzeugen
  CLEAR gs_fcat.
  gs_fcat-fieldname = 'CHECK1'.
  gs_fcat-checkbox  = 'X'.
  gs_fcat-hotspot   = 'X'.
  APPEND gs_fcat TO gt_fcat.

  CLEAR gs_fcat.
  gs_fcat-fieldname = 'CHECK2'.
  gs_fcat-checkbox  = 'X'.
  gs_fcat-hotspot   = 'X'.
  APPEND gs_fcat TO gt_fcat.

* ALV aufrufen
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
   EXPORTING
      i_callback_program                = sy-repid
      i_callback_user_command           = 'CALLBACK_USER_COMMAND'
      it_fieldcat_lvc                   = gt_fcat
    TABLES
      t_outtab                          = gt_data
* EXCEPTIONS
*   PROGRAM_ERROR                     = 1
*   OTHERS                            = 2
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.


* Ereignishandler
FORM callback_user_command  USING r_ucomm LIKE sy-ucomm
                         rs_selfield TYPE slis_selfield.

  FIELD-SYMBOLS <ls_data> TYPE t_data.

  IF r_ucomm = '&IC1'. "Hotspot wurde geklickt
    CASE rs_selfield-fieldname.
      WHEN 'CHECK1'.
        READ TABLE gt_data ASSIGNING <ls_data> INDEX rs_selfield-tabindex.
        IF sy-subrc = 0. "Klicks auf Summenzeile abfangen!
          IF <ls_data>-check1 = space.
            <ls_data>-check1 = 'X'.
            <ls_data>-check2 = space.
          ELSE.
            <ls_data>-check1 = space.
            <ls_data>-check2 = 'X'.
          ENDIF.

          rs_selfield-refresh    = 'X'.      "Neue Werte ans Frontend übertragen
          rs_selfield-col_stable = 'X'.      "Scollposition beibehalten
          rs_selfield-row_stable = 'X'.      "Scollposition beibehalten
        ENDIF.
      WHEN 'CHECK2'.
        READ TABLE gt_data ASSIGNING <ls_data> INDEX rs_selfield-tabindex.
        IF sy-subrc = 0. "Klicks auf Summenzeile abfangen!
          IF <ls_data>-check2 = space.
            <ls_data>-check2 = 'X'.
            <ls_data>-check1 = space.
          ELSE.
            <ls_data>-check2 = space.
            <ls_data>-check1 = 'X'.
          ENDIF.

          rs_selfield-refresh    = 'X'.      "Neue Werte ans Frontend übertragen
          rs_selfield-col_stable = 'X'.      "Scollposition beibehalten
          rs_selfield-row_stable = 'X'.      "Scollposition beibehalten
        ENDIF.
      WHEN OTHERS.
        "es wurde eine andere Spalte ausgewählt, also nichts tun
    ENDCASE.
  ENDIF.
ENDFORM.                    "callback_user_command

Folgende Benutzer bedankten sich beim Autor JHM für den Beitrag:
Meti

Gruß Hendrik

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von Meti (ForumUser / 5 / 1 / 0 ) »
Hallo,

leider funktioniert dies immer noch nicht. :( :( :( :cry: :cry: :cry:

Ich speichere diese Ergebnis (TRUE oder FALSE) in einer Datenbanktabelle, auf diese Datenbanktabelle greifen ich in einer Methode zu und sage, wenn NR1 = True mach etwas wenn NR1 = False mache nicht.

Code: Alles auswählen.

    DATA note_fcat TYPE TABLE OF lvc_s_fcat .   
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
      EXPORTING
        i_structure_name = 'Structure'.
      CHANGING
        ct_fieldcat      = note_fcat().
    FIELD-SYMBOLS <test> LIKE LINE OF note_fcat().

    LOOP AT note_fcat() ASSIGNING <test>.
      CASE <test>-fieldname.
        WHEN 'NAME'.
          <test>-drdn_hndl = '1'.
          <test>-outputlen = '28'.
          <test>-edit = 'X'.
        WHEN 'TEST1'.
          <test>-coltext = 'NR1'.
          <test>-outputlen = '7'.
          <test>-checkbox = 'X'.
          <test>-edit = 'X'.
        WHEN 'TEST_DESC'.
          <test>-coltext = 'NR2'.
          <test>-outputlen = '7'.
          <test>-checkbox = 'X'.
          <test>-edit = 'X'.
        WHEN OTHERS.
      ENDCASE.
Code-BSPs wären sehr hilfreich für mich.
Natürlich auch Anmerkungen was ich falsch mache.

Gruß
Meti

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Meti hat geschrieben:leider funktioniert dies immer noch nicht.
Eine genauerer Fehlerbeschreibung könnte zur Lösungsfindung beitragen. Meine Glaskugel versagt gerade.

Mir fällt gerade auf, dass in meinem Beispielcoding durch die Darstellung als Code ein falscher r_ucomm dargstellt wird. Hier sollte nicht '&IC1' eingtragen sein, sondern '&IC1'.
Gruß Hendrik

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von Meti (ForumUser / 5 / 1 / 0 ) »
Hallo ,
Eine genauerer Fehlerbeschreibung könnte zur Lösungsfindung beitragen
Ich habe eine Datenbanktabelle 'TABLE' und eine Struktur 'STRUCTURE'. Hier habe ich drei Felder 'TR0', 'TR1' und 'TR2' typ BOOL_D.
In meine Funktionsgruppe 'F_TEST' habe ich einen Dynpro '0100' von Dynprotyp 'Modulares Dialogfenster'.
Hier erzeuge ich einen ALV_GRID mit drei Spalten und nur eine Zeile. Eine Spalte 'TR0' gebe ich als normale Spalte aus.
'TR1' und 'TR2' gebe ich als CHECKBOXEN aus (siehe Code oben). Ich kann hier beide CHECKBOXEN gleichzeitig anklicken und dies ist das Problem für mich. Es soll nämlich nur 'TR1' oder 'TR2' angeklickt werden. :( :(

Ich hab auch an so etwas überlegt:
Wenn 'TR1'angeklickt ist, soll 'TR2' nicht editierbar sein oder ausgeblendet werden.

Gruß
Meti

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Meti hat geschrieben:Wenn 'TR1'angeklickt ist, soll 'TR2' nicht editierbar sein oder ausgeblendet werden.
Wieso man für drei Felder einen ALV braucht erschließt sich mir nicht ganz, das ist doch über normale Felder viel schneller realisiert.

Wenn es der ALV unbedingt sein soll habe ich dir bereits einen Weg aufgezeigt. Du mußt nach dem aktivieren der Checkbox die Kontrolle bekommen, um deine Prüfung durchzuführen. Das geht am einfachsten per HOTSPOT-Event. Dynpro&Edit => cl_gui_alv_grid. Diese Klasse hat ein Ereignis HOTSPOT_CLICK auf das mußt du dich registirieren. Im Ereignishandler machst du dann deine Prüfung/Änderung.
Gruß Hendrik

Re: Checkboxen einer ALV Grid abhängig machen

Beitrag von Meti (ForumUser / 5 / 1 / 0 ) »
Ich habe es geschafft.

Ich fange mein Klick mit der Ereignis "handle_data_changed".

Code: Alles auswählen.

 im_grid->register_edit_event( i_event_id = cl_gui_alv_grid=>mc_evt_modified ).
 SET HANDLER handle_data_changed FOR im_grid.
Dann deklariere ich die Methode "handle_data_changed".

Code: Alles auswählen.

    FIELD-SYMBOLS <mod_cell> LIKE LINE OF er_data_changed->mt_mod_cells().
    LOOP AT er_data_changed->mt_mod_cells() ASSIGNING <mod_cell>.
      FIELD-SYMBOLS <grid_line> LIKE LINE OF grid_table().
      READ TABLE grid_table ASSIGNING <grid_line> INDEX <mod_cell>-row_id.

      IF <mod_cell>-fieldname = 'TEST1' AND <mod_cell>-value = 'X'.
        <grid_line>-test = 'X'.
        <grid_line>-test2 = ' '.

      ELSEIF <mod_cell>-fieldname = 'TEST1' AND <mod_cell>-value = ' '.
        <grid_line>-test = ' '.
        <grid_line>-test2 = 'X'.

      ELSEIF <mod_cell>-fieldname = 'TEST2' AND <mod_cell>-value = 'X'.
        <grid_line>-test = ' '.
        <grid_line>-test2 = 'X'.

      ELSEIF <mod_cell>-fieldname = 'TEST2' AND <mod_cell>-value = ' '.
        <grid_line>-test = 'X'.
        <grid_line>-test2 = ' '.

      ELSE.
      ENDIF.
    ENDLOOP. 
:) :D :D :)

Seite 1 von 1

Vergleichbare Themen

6
Antw.
7449
Views
Checkboxen im ALV-Grid editierbar machen???
von Kollektor » 02.03.2011 20:53 • Verfasst in ABAP® für Anfänger
0
Antw.
1364
Views
Checkboxen im ALV-Tree
von Ratazong » 05.07.2006 18:17 • Verfasst in ABAP Objects®
3
Antw.
2573
Views
Anlegen von Checkboxen und Eingabefeldern
von Lehmo » 09.01.2007 15:54 • Verfasst in ABAP Objects®
6
Antw.
3049
Views
Checkboxen dynamisch erstellen
von mareikemei92 » 14.11.2018 10:57 • Verfasst in ABAP® Core
10
Antw.
1898
Views
Prüfung Checkboxen im Selektionsbildschirm
von woddstock99 » 22.01.2019 10:23 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 41 Minuten von a-dead-trousers gelöst 6 / 6001
ABAP - Mail so10 Text
vor einer Stunde von retsch 6 / 108
selection-screen comment mit icon
vor 10 Stunden von DeathAndPain 9 / 1154

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor 41 Minuten von a-dead-trousers gelöst 6 / 6001
ABAP - Mail so10 Text
vor einer Stunde von retsch 6 / 108
selection-screen comment mit icon
vor 10 Stunden von DeathAndPain 9 / 1154

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor 5 Tagen von Manfred K. 1 / 927
BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Wochen von snooga87 1 / 2733