3

I have a boolean type column in an html cfgrid. The data is stored in the database as 1/0 and is returned from CF as such. I want the user to see Yes/No instead of 1/0. I tried QuerySetCell, and couldn't get it to work.

The form is editable, when you double click the cell, the checkboxes show and it updates as it should. The only issue is the display.

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

Thanks in advance...

4

2 回答 2

6

您需要应用自定义字段渲染器。您需要向页面添加一个 init() js 函数以及一个渲染器方法。我有在我的博客上应用自定义渲染器的基本过程:

CF8 Ajax Grid:渲染器和事件

基本上,您将在网格初始渲染后调用您的 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 函数的 Adob​​e 文档,并记住您可以利用底层的Ext 1.1 API

于 2009-05-19T19:47:39.490 回答
1

我认为在数据库查询中使用 Decode 会更容易:

Decode(bitCol,1,'Yes','No') bitCol
于 2010-04-21T11:17:07.313 回答