获取DW中显示列的列表

时间:2011-01-05 08:32:47

标签: powerbuilder datawindow

如何获得dw中可以看到的列列表? 当我使用dwobject.object.datawindow.column.count遍历列时,我获得了sql中的所有列。是否至少有一种方法可以找出哪些不显示?

4 个答案:

答案 0 :(得分:1)

  Long li_Loop
  String ls_ColName, lsa_ColNames[]

  FOR li_Loop = 1 TO dwobject.object.datawindow.column.count
    ls_ColName = dwobject.Describe("#" + String( ll_Loop ) + ".Name")
    IF Long( dwobject.Describe( ls_ColName + ".Visible") ) > 0 THEN
      lsa_ColNames[ UpperBound(lsa_ColNames[]) + 1] = ls_ColName
    END IF

 next

//数组lsa_ColNames []包含所有可见列名称。

答案 1 :(得分:0)

我自己设法找到了它:

Integer li_col_idx, &
        li_pos

String  ls_objects, &
        ls_contorl, &
        ls_columns[], &
        ls_type, &
        ls_visible


li_col_idx = 1
ls_objects = dw_tab.object.datawindow.objects  // Forgot to add this row

DO while ls_objects <> ""
    li_pos = Pos(ls_objects, "~t")

    IF li_pos > 0 THEN
        ls_control = left(ls_objects, li_pos - 1)
        ls_objects = mid(ls_objects, li_pos + 1)
    ELSE
        ls_control = ls_objects
        ls_objects = ""
    END IF

    ls_type = dw_tab.describe(ls_control + ".type")
    ls_visible = dw_tab.describe(ls_control + ".visible")
    IF ls_type = "column" AND ls_visible = "1" THEN 
        ls_columns[li_col_idx] = ls_control
        li_col_idx++
    END IF
LOOP 

答案 2 :(得分:0)

在最近的代码中,我通过查看编辑样式改进了(希望如此)上面的内容。我不仅需要查找活动/显示的列,而且可以使用隐藏列(无可视控件(VC))设置排序,并且无法指示(请参阅&#34;列排序指示符上的线程&# 34。)

ls_control = idw.describe(ls_next_column + ".type")
if f_IsEmpty(ls_control) then continue

choose case ls_control
case 'column'
    // EDIT STYLE; dddw, ddlb, edit, mask...
    ls_control = idw.Describe(ls_next_column + ".Edit.Style")

    if f_IsEmpty(ls_control) then continue

    choose case ls_control
    case '?', '!'
        continue

    case else
        . . . 

这个编辑样式是空的,?要么 !当没有VC时。一旦你知道它是一个VC,那么检查它是否可见或者是否需要它。对于我的代码,我只保留一份VC列表,然后检查是否可以表示......

答案 3 :(得分:0)

我编写了以下函数来正确评估数据对象中对象(列,计算,文本等)的属性。

示例:以下代码将返回&#39; 1&#39;如果location_id列当前可见或者是&#39; 0&#39;如果它目前不可见。如果可见表达式包含复杂表达式并不重要。

putStrLn

我已经以某种形式使用它多年了。请享用! Chris Daugherty