2013-07-23 126 views
1

我正在嘗試使用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。這是否意味着綁定到數據表的數據不可用於其樣式部分?有沒有辦法做到這一點?

任何建議,將不勝感激!

編輯:我不能改變基於視圖項值的表單元格樣式,這裏是拋出DOC1沒有發現錯誤
的一個實例:

<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> 
+0

您是否嘗試過在不使用文檔值的情況下設置this.style?我也認爲這可能會在頁面加載時發生,然後將文檔加載到dataTable中。也許嘗試一個檢查doc1是否存在的子句,然後傳遞默認樣式(如果不存在)。 –

+0

嗨,我已經嘗試使用this.style沒有文件的值,這個工程。我也檢查過並且doc1存在 - 使用doc1.getcolumnvalues()將值放入表中[1]沒有問題 – Ned

+0

正確,但dataTable的結構中有一些內容用於檢查呈現前文檔是否存在。我認爲你的代碼試圖在頁面加載時編譯並且沒有加載結構。但我可能是錯的。 –

回答

1

樣式表不僅爲列中的每個值呈現屬性,還會爲每行計算屬性。這也包含了方面。

這意味着,如果您的列具有報頭和/或頁腳,該樣式表屬性計算用於這些隱形行,但沒有行值(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> 
+0

偉大的解決方法,並使完美的感覺。我現在已經在桌子上重複了一遍,但是已經測試過你的方式,並且它也能正常工作。儘管在使用中查找數據表限制。謝謝你的幫助 – Ned

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)" 
} 

做這些建議使它的工作?

+0

對不起,我應該說明DivisionsView綁定到自定義控件。這適用於所有樣式問題。您的建議是正確的,道歉,這是一個錯誤的嘗試簡化代碼張貼在這裏。還有其他建議嗎?謝謝 – Ned

+0

請更新您的問題以糾正錯字,以免其他人不會感到困惑。代碼應該沒有任何問題。變量'doc1'應該在'style'屬性中可用。是否有其他地方使用過'doc1'變量,這可能會導致問題。 – Naveen

+0

已更新原始問題。我看了看它是否是一個獨特的變量,它也是,我也改變了變量名稱來測試,同樣的問題 - 參考doc1沒有找到 – Ned

0

我放棄了一個數據表,並得到了一些東西在表格行上重複使用。這樣,我可以控制整個行的樣式,因此每個單元格都可以控制,因爲這些選項都是基於數據列的,所以您無法在數據表中執行此操作。感謝您的幫助

相關問題