2009-05-19 77 views
3

我有一個HTML cfgrid布爾類型列。數據以1/0形式存儲在數據庫中,並從CF返回。我希望用戶看到是/否,而不是1/0。我試過QuerySetCell,無法讓它工作。cfgrid布爾列作爲是/否

表單是可編輯的,當你雙擊單元格時,複選框會顯示,並且它應該更新。唯一的問題是顯示器。

<cfform> 
    <cfgrid name="blah" format="html" bind="mycfccall" selectmode="edit"> 
     <cfgridcolumn name="bitCol" header="Is it" width="75" type="boolean"> 
    </cfgrid> 
</cfform> 

在此先感謝...

回答

6

你需要應用自定義字段渲染器。您需要將一個init()js函數與一個渲染器方法一起添加到您的頁面中。我有我的博客應用自定義渲染的基本過程:

CF8 Ajax Grid: Renderers and Events

基本上,你會打電話給你的init()方法後,電網已初步呈現,通過使用ajaxOnLoad()方法:

<cfset ajaxOnLoad("init") /> 

在你的init()方法,你會得到電網的引用,它的ColumnModel:

init = function() { 
    var myGrid = ColdFusion.Grid.getGridObject('myGridID'); 
    var gridCM = myGrid.getColumnModel(); 
    // The rest goes here 
} 

您還需要您的渲染器方法,可以適用於任何列:

yesNoRenderer = function(value,meta,record,row,column,store) { 
    if (value === 1){ 
     return "Yes"; 
    } else { 
     return "No"; 
    } 
} 

在這之後,你需要渲染應用到您選擇的列:

gridCM.setRenderer(cm.getIndexById('myColumnName'), yesNoRenderer); 

的setRenderer方法將列索引(從0開始)以及作爲渲染器應用的函數。 getIndexById()方法應該在這裏工作,但您應該首先測試它,並記住在JavaScript中套管非常重要。

大多數CF Ajax組件在底層使用了Ext 1.1。仔細閱讀關於ColdFusion JavaScript Functions的Adobe文檔,並記住可以使用底層的Ext 1.1 API

+0

對不起,這裏的無知,但最後一行.. cm.setRenderer ...等 如果是這樣gridCM.setRenderer ..在init函數中創建的Var?而且,我在哪裏放置該行?在init函數裏面?特別是在任何功能之外?在此先感謝,這已經是一個巨大的幫助。 – 2009-05-26 14:21:18

1

我認爲這將是更容易使用解碼在數據庫中查詢:

Decode(bitCol,1,'Yes','No') bitCol