使用cl_salv_tree无法展开根父节点的技术问题
解决ALV Tree父节点无法展开的问题
问题原因
你的代码存在两个关键问题导致父节点无法正常展开:
- 节点关系常量误用:调用
add_node时使用了cl_gui_column_tree=>relat_last_child,但cl_salv_tree需要使用自身类库的常量cl_salv_node=>relat_last_child,错误的常量会导致节点层级关系未被正确识别。 - 变量类型不匹配:
lv_bebertext定义为结构类型t357,直接赋值字符串存在类型转换风险,可能影响节点创建逻辑。
修正后的代码
以下是调整后的完整代码,修复了上述问题:
REPORT z_salv_tree_expand. TYPES: BEGIN OF ty_kennzahlen, beber TYPE t357-beber, fing TYPE t357-fing, END OF ty_kennzahlen. DATA: go_tree TYPE REF TO cl_salv_tree, gr_node TYPE REF TO cl_salv_node, gr_nodes TYPE REF TO cl_salv_nodes, gr_main_key TYPE lvc_nkey, gt_kennzahlen TYPE STANDARD TABLE OF ty_kennzahlen, lv_bebertext TYPE string. PARAMETERS dummy. AT SELECTION-SCREEN OUTPUT. IF go_tree IS NOT BOUND. CALL METHOD cl_salv_tree=>factory EXPORTING r_container = cl_gui_container=>screen0 IMPORTING r_salv_tree = go_tree CHANGING t_table = gt_kennzahlen. gr_nodes = go_tree->get_nodes( ). " 添加父节点,使用cl_salv_tree专属的关系常量 gr_node = gr_nodes->add_node( related_node = '' relationship = cl_salv_node=>relat_last_child collapsed_icon = CONV #( icon_closed_folder ) expanded_icon = CONV #( icon_open_folder ) row_style = if_salv_c_tree_style=>intensified text = CONV #( 'Gesamt'(012) ) ). gr_main_key = gr_node->get_key( ). " 添加子节点,保持常量一致性 DATA(lt_kennzahlen) = VALUE string_table( ( `Child 1` ) ( `Child 2` ) ). LOOP AT lt_kennzahlen INTO lv_bebertext. gr_node = gr_nodes->add_node( related_node = gr_main_key relationship = cl_salv_node=>relat_last_child collapsed_icon = CONV #( icon_closed_folder ) expanded_icon = CONV #( icon_open_folder ) row_style = if_salv_c_tree_style=>intensified text = CONV #( lv_bebertext ) ). ENDLOOP. " 展开父节点及所有子节点 gr_node = gr_nodes->get_node( node_key = gr_main_key ). gr_node->expand( EXPORTING complete_subtree = abap_true ). go_tree->get_tree_settings( )->set_hierarchy_size( 50 ). go_tree->display( ). ENDIF.
核心修改说明
- 替换节点关系常量为
cl_salv_node=>relat_last_child,确保ALV Tree能正确识别父子节点层级。 - 将
lv_bebertext类型改为string,避免结构类型赋值字符串的潜在问题。
内容的提问来源于stack exchange,提问作者SBECK1
相关产品推荐
相关产品推荐

