使用Datatip在Datagrid中自定义Itemrender

时间:2009-08-26 13:37:22

标签: flex datagrid itemrenderer

我有一个datagrid,里面有一个datagridcolumn。如果没有自定义itemrenderer,我可以使用datatipfunction来显示自定义数据提示,但现在我想要一个自定义项目渲染,以不同方式着色行。因此,我扩展了标签并更改了数据方法,但现在我的datatip功能不再起作用了。

有什么想法吗?

提前致谢

塞巴斯蒂安

4 个答案:

答案 0 :(得分:1)

我知道这个问题有点旧,但是我遇到了同样的问题并通过查看标准DataGridItemRenderer类如何解决它来解决它。

所以基本上我最终将toolTipShowHandler()函数复制到我的类中(没有任何修改),实现了IDropInListItemRenderer接口并在我的渲染器的commitProperties()函数中添加了几行,这些函数也受到了DataGridItemRenderer的启发。 / p>

希望这有帮助。

答案 1 :(得分:1)

我参加派对的时间有点晚了,但是我遇到了一个针对图片的自定义DataGridItemRenderer的问题。以下链接中描述的解决方案很适合我:

http://www.kalengibbons.com/blog/index.php/2008/12/displaying-datatips-when-using-an-itemrenderer/

要点是你覆盖项目渲染的updateDisplayList(),并通过调用dataTipFunction和/或使用dataTipField设置工具提示,就像内置的项目渲染器一样。

答案 2 :(得分:1)

复制cbranch给出的链接内容。 stackoverflow更可靠地保存代码片段

使用itemRenderer时显示DataTips

在DataGridColumn中使用itemRenderers的一个坏处是你丢失了它通常提供的dataTip功能。好吧,这是伪造该功能的一种方法。

首先,像往常一样将dataTipField或dataTipFunction添加到DataGridColumn。

<mx:DataGridColumn  headerText="DataTip"
      dataField="name1"
      showDataTips="true"
      dataTipField="description1" />

然后,在itemRenderer中添加以下代码,以便能够使用该信息并显示工具提示。

private function getToolTip():String{
    var dg:DataGrid = listData.owner as DataGrid;
    var func:Function = dg.columns[listData.columnIndex].dataTipFunction;
    if(func != null){
           return func.call(this, this.data);
    }else if(dg.columns[listData.columnIndex].dataTipField.length){
           return data[dg.columns[listData.columnIndex].dataTipField];
    }else{
           return "";
     }
 }

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
     super.updateDisplayList(unscaledWidth, unscaledHeight);
     this.toolTip = getToolTip();
  }

这适用于dataTipFields和dataTipFunctions,并允许您以相同的方式处理列中的dataTips,无论您是否使用itemRenderer。唯一的细微差别是标签的定位,但可以使用样式轻松修改。您可以在此处下载完整的源代码,以获取其工作原理的功能示例。

source

答案 3 :(得分:-2)

就在我的脑海中,也许让您的自定义项目渲染器扩展DataGridColumn。这将为您的项呈示器提供常规列的所有功能。