【问题标题】:Check Spark DataGrid cells' contents programmatically?以编程方式检查 Spark DataGrid 单元格的内容?
【发布时间】:2012-01-24 11:33:36
【问题描述】:

我第一次使用 Spark DataGrid,发现它通常非常有用。既然我已经绘制了它,我想对网格的内容做一些事情,但我对如何继续有点卡住了。

我想创建一个函数,该函数遍历 DataGrid 中某个列的每个单元格,该函数将每个值与预定义值的数组进行检查;如果找到匹配项,则应通过更改其颜色将单元格突出显示为冲突。

我知道您可以通过使用getItemRendererAt() 函数并传递列和行索引来访问特定单元格的项目渲染器。但是我看不出我将如何循环遍历每一列中的值。

我很可能做错了,在这种情况下,请随意将我推向正确的道路。同样,如果可以做我想做的事,我很想听听如何做。

谢谢!

【问题讨论】:

    标签: actionscript-3 flash apache-flex flex4 flex-spark


    【解决方案1】:

    实际上,您应该创建自己的<s:GridItemRenderer /> 并将其用作dataGrid 的itemRenderer。

    这样,您将能够根据<s:GridItemRenderer />data 属性更改单元格的颜色。

    下面是一个例子:

    <?xml version="1.0" encoding="utf-8"?>
    <s:GridItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009" 
       xmlns:s = "library://ns.adobe.com/flex/spark" 
       xmlns:mx = "library://ns.adobe.com/flex/mx" >
    
        <fx:Script>
            <![CDATA[
            private function isValid(value:uint):Boolean
            {
                //whatever;
                return true;
            }
    
            ]]>
        </fx:Script>
    
        <s:BorderContainer width="100%" height="100%">
            <s:borderStroke>
                <s:SolidColorStroke color="{isValid(data)?#00FF00:#FF0000}" />
            </s:borderStroke>
            <s:UITextField label="{data}" />
        </s:BorderContainer>
    
    </s:GridItemRenderer>
    

    【讨论】:

    • 非常感谢,这让我走上了正确的道路 :) 我研究了在 Flash Builder 中创建一个 GridItemRenderer,使用它的自动组件创建,并设法做一些类似于你建议的事情。非常感谢,非常感谢!
    【解决方案2】:

    使用上面的示例,每次更改数据时也可以覆盖“设置数据”以更改颜色,而不仅仅是在网格创建时

    <?xml version="1.0" encoding="utf-8"?>
    <s:GridItemRenderer xmlns:fx = "http://ns.adobe.com/mxml/2009" 
                    xmlns:s = "library://ns.adobe.com/flex/spark" 
                    xmlns:mx = "library://ns.adobe.com/flex/mx"  >
    
    <fx:Script>
        <![CDATA[
            import mx.controls.ColorPicker;
            import mx.events.FlexEvent;
            import mx.utils.ColorUtil;
    
            override public function set data(value:Object):void{
                super.data = value;
    
                if(data.different == 1){
                    solidColor.color = 255;
                }
            }
    
        ]]>
    </fx:Script>
    
    <s:BorderContainer width="100%" height="100%">
        <s:borderStroke>
            <s:SolidColorStroke   id="solidColor" />
        </s:borderStroke>
        <s:UITextFieldGridItemRenderer label="{data.name}" />
    </s:BorderContainer>
    </s:GridItemRenderer>
    

    接下来的步骤很简单,从数据网格中克隆你的 dataProvider,然后比较两者,如果项目发生变化,只需将“1”设置为,例如,上面示例中的标志“不同”,然后itemRenderer 会调用自己并自动改变颜色

    【讨论】:

    • 非常感谢,这也有帮助。很高兴对我如何做到这一点有另一个角度。
    猜你喜欢
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多