Xpages基于单元格值的数据表单元格颜色

时间:2013-07-23 10:37:41

标签: xpages

我正在尝试使用xpages数据表,并根据单元格值将列中单元格的单元格颜色设置为不同。我发现虽然数据表绑定到视图并且指定了集合(以获取行值),但这似乎不适用于样式部分。

以下是一个例子:

<xp:dataTable id="dataTable8" rows="30" var="doc1">
    <xp:this.value><![CDATA[#{javascript:var View:NotesView = DivisionsView;
View.getAllEntriesByKey("ViewName")}]]></xp:this.value>
        <xp:column id="column1" style="width:75px;font-family:Tahoma">
        <xp:text escape="true" id="computedField1">
        <xp:this.value><![CDATA[#{javascript:doc1.getColumnValues()[1]
}]]></xp:this.value>
                <xp:this.style><![CDATA[#{javascript:v=doc1.getColumnValues()[1];
if(v=="Yes"){"background-color:rgb(255,0,0)"}}]]></xp:this.style>
        </xp:text>
        <xp:this.facets>
            <xp:label value="Header" id="label1" xp:key="header">
            </xp:label>
        </xp:this.facets>
    </xp:column>
</xp:dataTable>

这只显示了doc1 not found错误。这是否意味着绑定到数据表的数据不适用于它的样式部分?有没有办法做到这一点?

任何建议都将不胜感激!

编辑:我无法根据视图条目值更改表格单元格样式,这里是一个抛出doc1 not found错误的例子:

<xp:column id="column1">
    <xp:this.style><![CDATA[#{javascript:v=doc1.getColumnValues()[1];
if(v=="Yes"){"background-color:rgb(255,0,0)"}}]]></xp:this.style>
    <xp:text escape="true" id="computedField1">
        <xp:this.value><![CDATA[#{javascript:doc1.getColumnValues()[1]
}]]></xp:this.value>
    </xp:text>
    <xp:this.facets>
        <xp:label value="Header" id="label1" xp:key="header">
        </xp:label>
    </xp:this.facets>
</xp:column>

3 个答案:

答案 0 :(得分:1)

stylesheet 属性不仅针对列中的每个值呈现,还针对每一行进行计算。这也是一个方面。

这意味着如果您的列有标题和/或页脚,则会为这些不可见行计算样式表属性,但没有行值( DOC1 )。

如果您更改代码并添加try / catch,则可以看到结果。

<xp:column id="column1">
   <xp:this.style>
      <![CDATA[#{javascript:
         try{
            v=doc.getColumnValues()[1];
            if(v=="Yes"){"background-color:rgb(255,0,0)"}
         }catch(e){
            return "background-color:rgb(255,0,255)";
         }}]]>
    </xp:this.style>
   ...
   ...
</xp:column>

答案 1 :(得分:0)

我希望您在代码中检查一些内容。

首先绑定数据的代码:

var View:NotesView = DivisionsView;
View.getAllEntriesByKey("ViewName")

什么是DivisionsView?要绑定的实际代码如下所示:

var View:NotesView = database.getView("ViewName");
View.getAllEntriesByKey("KeyName")

其次,在您添加样式的代码中,您在=条件中使用了单==而不是if。所以代码就是这样的:

v = doc1.getColumnValues()[1];
if (v=="Yes") {
    "background-color:rgb(255,0,0)"
}

这些建议是否有效?

答案 2 :(得分:0)

我放弃了一个数据表,并使用表格行上的重复来完成工作。这样我就可以控制整行的样式,因此每个单元格,你似乎无法在数据表中执行此操作,因为选项都是基于数据列的。谢谢你的帮助