Abap 双击是否显示ALV表格行详细信息?
假设我有一张包含客户的表格,如alv网格所示,如下所示:Abap 双击是否显示ALV表格行详细信息?,abap,alv,Abap,Alv,假设我有一张包含客户的表格,如alv网格所示,如下所示: **BEFORE THIS: Set up parameters, SQL Select, Table etc. CREATE OBJECT gr_alv_grid EXPORTING i_parent = cl_gui_custom_container=>default_screen EXCEPTIONS error_cntl_create = 1 error_cnt
**BEFORE THIS: Set up parameters, SQL Select, Table etc.
CREATE OBJECT gr_alv_grid
EXPORTING
i_parent = cl_gui_custom_container=>default_screen
EXCEPTIONS
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
ENDIF.
gr_alv_grid->set_table_for_first_display(
EXPORTING
i_structure_name = 'ZDebcdstest'
CHANGING
it_outtab = lt_debis
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4
).
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**在此之前:设置参数、SQL选择、表格等。
创建对象gr_alv_栅格
出口
i\u parent=cl\u gui\u custom\u container=>default\u屏幕
例外情况
错误\u cntl\u create=1
错误\u cntl\u init=2
错误链接=3
错误\u dp\u create=4
其他=5。
如果sy subrc为0。
消息ID sy msgid类型sy msgty编号sy msgno。
恩迪夫。
gr\U alv\U grid->为第一次显示设置\U表格\U(
出口
i_结构_名称='ZDebcdstest'
改变
it\u outtab=lt\u debis
例外情况
无效的\u参数\u组合=1
程序错误=2
太多线=3
其他=4
).
如果sy subrc为0。
消息ID sy msgid类型sy msgty编号sy msgno
使用sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4。
恩迪夫。
我想要的是双击任何给定行并获得其中包含的对象的更详细概览的选项,例如在SE16中完成的操作。我已经设置了一个事件处理程序来监听双击,这是可行的,但我还没有弄清楚如何获取一行中的所有相关数据并详细显示所选对象
非常感谢您的帮助。以下是如何使其工作的原始示例“如SE16中所做的”
METHOD handle_double_click.
DATA: ls_sflight LIKE LINE OF gt_sflight,
ls_layout TYPE lvc_s_layo.
DATA: lt_fieldcatalog TYPE lvc_t_fcat,
ls_fieldcatalog TYPE lvc_s_fcat.
DATA: details_outtab TYPE lvc_t_detm,
ls_detail TYPE lvc_s_detm,
lt_detail_tab TYPE lvc_t_deta,
ls_detail_tab TYPE lvc_s_deta.
READ TABLE gt_sflight INDEX e_row-index INTO ls_sflight.
ls_fieldcatalog-fieldname = 'COLUMNTEXT'.
ls_fieldcatalog-ref_table = 'LVC_S_DETA'.
ls_fieldcatalog-key = 'X'.
ls_fieldcatalog-seltext = 'Field'.
ls_fieldcatalog-outputlen = 30.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
CLEAR ls_fieldcatalog.
ls_fieldcatalog-fieldname = 'VALUE'.
ls_fieldcatalog-ref_table = 'LVC_S_DETA'.
ls_fieldcatalog-seltext = 'Field value'.
ls_fieldcatalog-outputlen = 20.
APPEND ls_fieldcatalog TO lt_fieldcatalog.
ls_layout-no_toolbar = 'X'.
LOOP AT gt_fieldcat ASSIGNING FIELD-SYMBOL(<field>).
ls_detail_tab-columntext = <field>-scrtext_l.
ASSIGN COMPONENT sy-tabix OF STRUCTURE ls_sflight TO FIELD-SYMBOL(<col>).
ls_detail_tab-value = <col>.
APPEND ls_detail_tab TO lt_detail_tab.
ENDLOOP.
ls_detail-detailtab = lt_detail_tab.
APPEND ls_detail TO details_outtab.
CALL FUNCTION 'LVC_ITEM_DETAIL'
EXPORTING
i_title = 'Row details'
it_fieldcatalog = lt_fieldcatalog
is_layout = ls_layout
TABLES
t_outtab = details_outtab.
ENDMETHOD. "handle_double_click
双击方法句柄。
数据:ls\U sflight类似gt\U sflight的线条,
ls_布局类型lvc_s_布局。
数据:lt_字段目录类型lvc_t_fcat,
ls_现场目录类型lvc_s_fcat。
数据:详细信息表类型lvc\U t\U detm,
ls_详图类型lvc_s_详图,
lt_详图_选项卡类型lvc_t_deta,
详细信息选项卡类型lvc\U s\U deta。
将表gt\U sflight INDEX e\U row-INDEX读入ls\U sflight。
ls_fieldcatalog-fieldname='COLUMNTEXT'。
ls_fieldcatalog-ref_表='LVC_S_DETA'。
ls_fieldcatalog-key='X'。
ls_fieldcatalog-seltext='Field'。
ls_fieldcatalog-outputlen=30。
将ls_fieldcatalog追加到lt_fieldcatalog。
清除ls_字段目录。
ls_fieldcatalog-fieldname='VALUE'。
ls_fieldcatalog-ref_表='LVC_S_DETA'。
ls_fieldcatalog-seltext='字段值'。
ls_fieldcatalog-outputlen=20。
将ls_fieldcatalog追加到lt_fieldcatalog。
ls_布局-no_工具栏='X'。
循环gt_fieldcat分配字段-SYMBOL()。
ls_detail_tab-columntext=-scrtext_l。
将结构ls\u sflight的组件sy tabix分配给FIELD-SYMBOL()。
ls\u详细信息\u选项卡值=。
将ls\u detail\u选项卡附加到lt\u detail\u选项卡。
结束循环。
ls\u detail-detail选项卡=lt\u detail\u选项卡。
将ls\u详细信息附加到详细信息输出选项卡。
调用函数“LVC\u项目\u详细信息”
出口
i_title='行详细信息'
it\u fieldcatalog=lt\u fieldcatalog
is_布局=ls_布局
桌子
t\u outtab=详细信息。
ENDMETHOD.“处理\双击”
在上面的片段中
gt\u sflight-要从中捕获行详细信息的主表
gt_fieldcat-此表的字段目录,必须在触发事件之前填充
如果您不知道如何将此方法应用于ALV,请搜索about event implementation(关于事件实现)。在事件数据中,您可以获得行号,然后在读取ALV中显示的内部表时必须使用该行号。在这种情况下,
lt\u debis
。互联网上也有很多关于ALV的资料,所以请先做你的研究。你的意思是像这样导入它?类lh_事件处理程序定义。公共部分。方法:处理cl\u gui\u alv\u网格导入e\u行的事件双击双击。末级。然后在实现中使用该数据?此事件有三个参数,可在事件处理程序中使用:E_行E_列ES_行\u否
。行中的数据可以像这样存取lt\u debis[e\u row-index]
Ah,我明白了。这可能是个愚蠢的问题,但在实现中会是什么样子呢?实现取决于您。请尝试我的提示,用具体问题更新您的示例,然后社区将能够帮助您。将表gt\u sflight INDEX e\u row-INDEX读入ls\u sflight。
就是这样。