Altes Problem - ALV Grid - Spalte nicht editierbar...

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
27 Beiträge • Vorherige Seite 2 von 2 (current)
27 Beiträge Vorherige Seite 2 von 2 (current)

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo

so habe ich es nun gebaut.

Code: Alles auswählen.

  IF g_zaehler IS INITIAL.
*   Setze Zähler auf 1 wenn in Ändern Modus gesprungen
    g_zaehler = 1.

    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      IF <g_fieldcat>-fieldname <> 'ID'.
        <g_fieldcat>-edit = 'X'.
      ELSEIF <g_fieldcat>-fieldname = 'ID'.
        <g_fieldcat>-no_out = 'X'.
      ENDIF.
    ENDLOOP.

  ELSE.


  ENDIF.

  CALL METHOD im_cl_alv->set_frontend_fieldcatalog
  EXPORTING
    it_fieldcatalog = g_fieldcat_t.

  CALL METHOD cl_gui_cfw=>flush.
ich habe nun auch den Flush drinnen - die Spalte lässt das ALV wunderbar verschwinden - aber EDIT geht irgendwie nicht.

Aber is ok so mit dem verschwinden. Nur kommt jetzt mein 2tes Problem.
Mein Else Zweig soll dafür sein, das ALV wieder so anzuzeigen wie beim ersten Aufruf des ALVs... alle Spalten da und nicht eingabebereit.

Kann mir da noch jemand helfen?

Liebe Grüße
Markus

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


Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Mavrix hat geschrieben:Hallo

Code: Alles auswählen.

    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      IF <g_fieldcat>-fieldname <> 'ID'.
        <g_fieldcat>-edit = 'X'.
      ELSEIF <g_fieldcat>-fieldname = 'ID'.
        <g_fieldcat>-no_out = 'X'.
      ENDIF.
    ENDLOOP.
Deine ALV-Spalte verschwindet deshalb, weil dein ELSEIF IMMER ausgeführt wird bei der Spalte ID. Somit wirst du dieses Feld nie wieder sehn :twisted: :D
Wie kommste eigentlich darauf das Feld auch auszublenden? Is ja egal...

Wenn dir das auch passt, das das Feld ausgeblendet wird, dann mach das mal so:
( ich gehe mal davon aus das dein g_zaehler dein Flag ist, ob geändert werden soll, bzw. nur angeschaut.)

Code: Alles auswählen.

If g_zaehler is initial.   " Änderungsmodus
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      <g_fieldcat>-edit = 'X'.
      IF <g_fieldcat>-fieldname = 'ID'.
        <g_fieldcat>-no_out = 'X'.
      ENDIF.
    ENDLOOP.
else.  "Ansichtsmodus
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      clear: <g_fieldcat>-edit,
                <g_fieldcat>-no_out .
    ENDLOOP.
endif.
g_zaehler muss eben dann schon gesetzt worden sein. Ich geh mal davon aus du benutzt ein Button zum Sichtenwechsel mit einem Returncode. Diesen dann eben wie eine Ampel schalten.


Das muss ausgeführt werden, wenn der Returncode kommt, der die Sichten ändert.

Code: Alles auswählen.

if g_zaehler is initial.
 g_zaehler = 1.
else.
 clear g_zaehler.
endif.

Gruß
Markus

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Markus.

So funktioniert es schon einmal halbwegs...

Code: Alles auswählen.

else.  "Ansichtsmodus 
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
      clear: <g_fieldcat>-edit, 
                <g_fieldcat>-no_out . 
    ENDLOOP. 
endif. 
so wie oben, schaltet er zwar zurück, aber das ALV bleibt trotzdem eingabebereit...

Markus
Echt vielen Dank im Voraus..

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Markus.

So funktioniert es schon einmal halbwegs...

Code: Alles auswählen.

else.  "Ansichtsmodus 
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
      clear: <g_fieldcat>-edit, 
                <g_fieldcat>-no_out . 
    ENDLOOP. 
endif. 
so wie oben, schaltet er zwar zurück, aber das ALV bleibt trotzdem eingabebereit...

Markus
Echt vielen Dank im Voraus..

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Markus.

So funktioniert es schon einmal halbwegs...

Code: Alles auswählen.

else.  "Ansichtsmodus 
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
      clear: <g_fieldcat>-edit, 
                <g_fieldcat>-no_out . 
    ENDLOOP. 
endif. 
so wie oben, schaltet er zwar zurück, aber das ALV bleibt trotzdem eingabebereit...

Markus
Echt vielen Dank im Voraus..

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Mavrix hat geschrieben:Hallo Markus.

So funktioniert es schon einmal halbwegs...

Code: Alles auswählen.

else.  "Ansichtsmodus 
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>. 
      clear: <g_fieldcat>-edit, 
                <g_fieldcat>-no_out . 
    ENDLOOP. 
endif. 
so wie oben, schaltet er zwar zurück, aber das ALV bleibt trotzdem eingabebereit...

Markus
Echt vielen Dank im Voraus..
Du wiederholst dich :lol:

Den CodeAbschnitt, wenn dieser so in deinem Prog steht, kann nix mehr eingabebereit stehen. Dann ist was an deiner Logik verkehrt.
den "Flush" machste schon noch immer oder?


Gib doch mal den ganzen Quelltext von dir an...mit diesen Bruchstücken, können wir dir nicht wirklich weiterhelfen.
Du sagst nun das es funktioniert aber was meinste mit "er schaltet zurück"..in welchem Gang war er denn? 8)

Gruß
Markus

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Markus,

also ich kopier nun noch mal den kompletten Abschnitt hier rein.

Das ist mein Usercommand:

Code: Alles auswählen.

* Usercommand abfangen
  CASE g_okcode.

    WHEN 'CHANGE'.

*     Wechsle in den Change Modus
      PERFORM change_modus USING g_cl_alv.
Und das ist das Unterprogramm:

Code: Alles auswählen.

*&---------------------------------------------------------------------*
*&      Form  change_modus
*&---------------------------------------------------------------------*
FORM change_modus USING    im_cl_alv TYPE REF TO cl_gui_alv_grid.

*----------------------------------------------------------------------*
* Hier wird das ALV Grid in den Ändern Modus oder Anzeige Modus
* geschaltet
*----------------------------------------------------------------------*
* Lokale Variablendeklaration
  DATA l_event_receiver TYPE REF TO lcl_event_receiver.
*
** Setze ALV-GRID in ÄnderungsModus
*  CALL METHOD im_cl_alv->set_ready_for_input
*    EXPORTING
*      i_ready_for_input = 1.
*


  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
       EXPORTING
            i_structure_name       = 'ZMBE_ADRESSDATEN_S'
       CHANGING
            ct_fieldcat            = g_fieldcat_t
       EXCEPTIONS
            inconsistent_interface = 1
            program_error          = 2
            OTHERS                 = 3.
  IF sy-subrc <> 0.
    IF 1 = 2. MESSAGE e049(zmbe) WITH ''. ENDIF.            "#EC *
    CREATE OBJECT g_cl_msg
      EXPORTING
        i_msgid = 'ZMBE'
        i_msgno = '049'
        i_msgty = /auk/cl_msg=>gc_msgty_fehler.
  ENDIF.


  IF g_zaehler IS INITIAL.
    g_zaehler = 1.
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      <g_fieldcat>-edit = 'X'.
      IF <g_fieldcat>-fieldname = 'ID'.
        <g_fieldcat>-no_out = 'X'.
      ENDIF.
    ENDLOOP.
*   Damit wird Eintrag sofort in ITAB geschrieben, bei ENTER Betätigung
    CALL METHOD im_cl_alv->register_edit_event
     EXPORTING
      i_event_id = cl_gui_alv_grid=>mc_evt_enter.

    CALL METHOD im_cl_alv->register_edit_event
     EXPORTING
       i_event_id = cl_gui_alv_grid=>mc_evt_modified.

    CREATE OBJECT l_event_receiver.
    SET HANDLER l_event_receiver->check_data_changed FOR g_cl_alv.

  ELSE.
    LOOP AT g_fieldcat_t ASSIGNING <g_fieldcat>.
      CLEAR: <g_fieldcat>-no_out,
             <g_fieldcat>-edit.
    ENDLOOP.

* Setze ALV-GRID in AnzeigenModus
    CALL METHOD im_cl_alv->set_ready_for_input
      EXPORTING
        i_ready_for_input = 0.
    CLEAR: g_zaehler.
  ENDIF.

  CALL METHOD im_cl_alv->set_frontend_fieldcatalog
  EXPORTING
    it_fieldcatalog = g_fieldcat_t.

  CALL METHOD cl_gui_cfw=>flush.

ENDFORM.                    " change_modus
Kannst du damit etwas anfangen?

Mit zurück schalten meinte ich in den 1 Gang natürlich :-). Nein spaß bei Seite, er springt einmal in den Ändern Modus - beim 2ten mal drücken in den Ansichtsmodus, und ab dem 3 Mal nur noch im Ansichts Modus hin und her... einmal wird Spalte ID eingeblendet und einmal nicht.

Viele Grüße
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Mahlzeit,

hatte vormittag zu tun. Werde mir das ganze mal anschauen. Könnte mir denken woran es liegt, muss ich aber mal selbst ne kurzes Coding schreiben.

Gruß
Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Was machste in deinem EVENT?

Gruß
Markus

Beitrag von Mavrix (ForumUser / 58 / 0 / 0 ) »
Hallo Markus,

also ich habe nun das Problem gelöst... zwar fungiert das Ausgrauen der einzelnen Spalte nicht. Aber sonst funktioniert alles...

habe es nun mit Hilfe des Layouts gemacht get / set frontend Layout und dort die Editierbarkeit gesetzt.

trotzdem vielen vielen dank für die zahlreichen hilfestellungen...

jetzt hab ich erstma 8 tage urlaub... :-)

schöne zeit ich werd mich sicher auch mal von daheim ein bissch ran machen und mal schrieben *g*

Markus

Beitrag von MarkusW (Specialist / 406 / 5 / 0 ) »
Na dann, wenns ausreicht.

Schönen Urlaub.

Gruß
Markus

Beitrag von TWP (Specialist / 445 / 0 / 1 ) »
Hi,

eventuell liegt es an deinem EVENT (Create Objekt). M.E sollte das nur einmal erstellt werden und zwars zum zeitpunkt der Initialisierung des Grid selbst. Sprich nach dem ersten senden des ALV. Dazu solltest du deine EVENT als Globales definieren.

Schönene Urlaub.

Thomas

Vergleichbare Themen

1
Antw.
2097
Views
ALV editierbar nach jeder Zelle Summierung in der gl. Spalte
von Kleenmex » 09.05.2008 11:00 • Verfasst in ABAP Objects®
3
Antw.
6889
Views
ALV Grid (CL_SALV_TABLE) editierbar
von egge » 25.01.2008 11:02 • Verfasst in Dialogprogrammierung
6
Antw.
14688
Views
ALV-GRID: Feldweise editierbar
von matthes » 30.04.2008 11:02 • Verfasst in ABAP Objects®
1
Antw.
2533
Views
ALV-Grid editierbar -> ab welchem Release
von svenk » 07.08.2007 13:56 • Verfasst in Dialogprogrammierung
4
Antw.
5391
Views
ALV-Grid editierbar machen (mit Bedingung)
von hausi » 04.08.2015 08:57 • Verfasst in ABAP® Core

Über diesen Beitrag


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

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.