victorxiezhiliang
谢良
采纳率0%
2016-08-02 07:19 阅读 2.6k

PB中如何得到动态Crosstab中的某个单格列名和数据

1

PB中如何得到动态Crosstab中的某个单元格列名和数据,当选中某个单元格列名的数据时,
数据的color就会改变,其他的还是原来的color.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • feng1790291543 鱼弦 2016-08-02 07:59

    long ll_row,ll_cycle,i,k
    string ls_ColType,ls_ColName,ls_Col
    string ls_value[]
    long ll_value[]
    For ll_row = 1 To dw_1.RowCount()
    For ll_cycle = 1 To long(dw_1.Describe("DataWindow.Column.Count"))
    ls_ColType = dw_1.DescRibe( "#" + String( ll_cycle ) + ".ColType" )//获得其数据类型
    ls_ColName = dw_1.DescRibe( "#" + String( ll_cycle ) + ".Name" ) //获得其列名
    Choose CASE Left(ls_col,3)
    CASE "cha"
    ls_value[i] = dw_1.GetItemString( ll_row, ll_cycle ))
    i++
    CASE "lon","num"
    ll_value[k] = dw_1.GetItemNumber( ll_row, ll_cycle ))
    k++
    End Choose
    Next
    Next

    datawindow.crosstab.staticmode=yes,它使得报表处于一个静态模式
    此时,列名是有规律的
    得到列名,就可以用getitem()来取数据了
    想了解静态模式下的列名有什么规律,在clicked中messagebox()出来看看就知道了

    点赞 评论 复制链接分享
  • devmiao devmiao 2016-08-02 10:39

    http://www.xuexibar.cn/bcsc/powerbuilder/4720454.shtml
    没测试,提供个人思路,供参考:long ll_row,ll_cycle,i,kstring ls_ColType,ls_ColName,ls_Colstring ls_value[]long ll_value[]i = 1k = 1For ll_row = 1 To dw_1.RowCount()For ll_cycle = 1 To long(dw_1.Describe("DataWindow.Column.Count"))ls_ColType = dw_1.DescRibe( "#" + String( ll_cycle ) + ".ColType" )//获得其数据类型ls_ColName = dw_1.DescRibe( "#" + String( ll_cycle ) + ".Name" ) //获得其列名Choose CASE Left(ls_col,3)CASE "cha"ls_value[i] = dw_1.GetItemString( ll_row, ll_cycle ))i++CASE "lon","num"ll_value[k] = dw_1.GetItemNumber( ll_row, ll_cycle ))k++End ChooseNextNext这个问题第3个回答:
    这个CSDN里格式设置工具“源代码”没PB的啊这个问题第4个回答:
    datawindow.crosstab.staticmode=yes,它使得报表处于一个静态模式
    此时,列名是有规律的
    得到列名,就可以用getitem()来取数据了这个问题第5个回答:
    想了解静态模式下的列名的规律,在ed中messagebox()出来看看就知道了
    (学 习 吧:www.xuexibar.cn)

    点赞 评论 复制链接分享
  • devmiao devmiao 2016-08-02 10:41

    P>PowerBuilder 是大家公认的、 最佳的数据库前端开发工具之一, 其独到之处,那就是数据窗口(DataWindow)。它能够灵活地组织数据库中的各种数据, 用户能用一个简单的查询窗口就可以得到丰富的查询结果, 并且能够对查询结果集通过程序控制,得出各种用户想得到的最终结果。如果能够熟练地运用数据窗口这一专利技术, 无疑会给开发人员和用户带来巨大的方便。
      Crosstab是数据窗口中一种用于统计、分析数据的显示风格,其含义为Cross Tabulation,即横向制表。它可以将检索到的数据分类或分组,进行累计求和或求平均值等运算,编制统计表格。
      但是,开发者在使用Crosstab数据窗口时会碰到一个问题:如果开发者想对其中的列内容进行处理时,不能用通用的方法得到Crosstab中的列名,使该操作无法运行。这是因为:Crosstab数据窗口中行列定义不同于其它的数据窗口,而且其列数是变化的。因此要得到Crosstab中的列名必须采用其它办法。
      下面以一个统计各工资段作者人数,按男女性别分别统计的Crosstab数据窗口静态风格为例探讨得到Crosstab中的列名。
      1、选择显示风格,定义数据源后,选择表”auths”中的列”author_code”、”salary”和”sex”;用鼠标拖动Source Data列表框中的“sex”列到Columns列表框中,使“sex”列成为数据窗口的纵向统计列;用鼠标拖动Source Data列表框中的“salary”列到Rows列表框中,使“salary”列成为数据窗口的横向统计列,将salary改为int(salary/100)*100;用鼠标拖动Source Data列表框中的“author_code”列到列表框中,使“count(author_code for Crosstab)”列成为数据窗口的统计值,此时“CrossTab Definition”对话框显示如下:(图略)
      2、单击OK按钮,数据窗口显示如下:(图略)
      3、Crosstab数据窗口中的列名
      Crosstab显示风格有静态和动态。如采用静态风格,则在“CrossTab Definition”对话框中取消选中“Rebuild columns at runtime”复选框。数据窗口的列名在Detail栏中,有一定规律可循:
      第一栏的列名分两种情况:一、“CrossTab Definition”对话框中的所选的Rows的列名为表中的字段,如Rows=salary则第一栏的列名为”salary”;二、如“CrossTab Definition”对话框中的所选的Rows的列名为计算表达式,如int(salary/100)*100,则第一栏的列名均为”row_column”。
      其余各? 次为所选Value的列名的排列,如Value为author_Code,则各栏依次”author_Code”,”author_code_1”, “author_code_2”,…… 栏的数目根据所选的Columns所能产生的数目而定,如Columns=sex,则只有两栏”author_Code”,”author_code_1”;
      最后一列的列名为“grand_count_”+所选Value名,如在此例中为”grand_count_author_code” 。如采用动态风格,则在“CrossTab Definition”对话框中选中“Rebuild columns at runtime”复选框。数据窗口的列名在Detail栏中:(图略)第一栏和最后一列的列名情况类似静态风格所述,也就不雷同了。 中间各栏的列名情况与静态风格有所不同,依次为所选rows列名的排列,如rows为”salary”,在此例中各栏依次为”salary”,”salary_1”;
      这样,问题就迎韧而解了。在得到Crosstab中的列名之后也就能自由地对其中的行列内容进行处理。通过上面的介绍,读者其实也能感觉到,计算机中许多不太容易实现的功能,只要好好分析,仔细琢磨,多试验几次,一般还是能找到有效的解决办法的。

    点赞 评论 复制链接分享

相关推荐