【问题标题】:Setting background color for datagrid row in Adobe Flex在 Adob​​e Flex 中设置数据网格行的背景颜色
【发布时间】:2010-10-19 09:24:54
【问题描述】:

我需要以编程方式更改 Flex 中数据网格中单行的背景颜色。我搜索了网络并找到了对“dg.setPropertiesAt”的引用,这不是受支持的方法(根据编译器)。此外,有建议扩展 dg 的“drawRowBackground”方法,但我需要在外部设置背景(而不是从 dg 内部的逻辑)。

欢迎提出任何建议。

TIA, 鲍勃

【问题讨论】:

    标签: apache-flex datagrid colors background row


    【解决方案1】:

    我通过扩展 DataGrid 类并创建自己的方法来管理它,如下所示:

    public function paintRow(rowNumber:Number,color:uint):void{
    var rowBGs:Sprite=Sprite(listContent.getChildByName("rowBGs"));
    drawRowBackground(rowBGs,rowNumber,listContent.rowInfo[rowNumber].y,listContent.rowInfo[rowNumber].height,color,null);
    }
    

    这是受到 datagrid 类的 drawRowBackgrounds 方法的启发。

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      将其与 spark.DataGrid 一起使用

      DataGridRowBackground.mxml:

      <?xml version="1.0" encoding="utf-8"?>
      <s:DefaultGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
          xmlns:s="library://ns.adobe.com/flex/spark" 
          xmlns:mx="library://ns.adobe.com/flex/halo"
          implements="spark.components.gridClasses.IGridVisualElement"
          backgroundColor="{data.color}" background="true">
      
          <fx:Script>
              <![CDATA[
      
          import spark.components.Grid;
      
          public function prepareGridVisualElement(grid:Grid, rowIndex:int, columnIndex:int):void
          {
              if (!grid.dataProvider || rowIndex >= grid.dataProvider.length)
                  data = null;
              else
                  data = grid.dataProvider.getItemAt(rowIndex);
          }
      
              ]]>
          </fx:Script>
      </s:DefaultGridItemRenderer>
      

      在您的应用代码中:

      <s:DataGrid>
          <s:rowBackground>
              <fx:Component><my:DataGridRowBackground /></fx:Component>
          </s:rowBackground>
      </s:DataGrid>
      

      关键元素是 IGridVisualElement 接口,它可以让你绑定到你的 dataProvider。 该接口由 GridLayout 调用。见:http://opensource.adobe.com/svn/opensource/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/gridClasses/GridLayout.as。您可以将任何 IVisualElement 用作背景渲染器,但使用 s:DefaultGridItemRenderer 您可以获得一些开箱即用的功能。

      希望对你有帮助

      【讨论】:

        【解决方案3】:
        dg.setPropertiesAt(3, {backgroundColor:0xFF0000});
        

        其中 dg 是您的数据网格,数字 3 是您的网格的行颜色。

        【讨论】:

          【解决方案4】:

          几天前我也在想同样的事情。如果你有 Flex 的 Pro 版本,它的 AdvancedDataGrid 有内置的“styleFunction”属性来处理这个问题。如果您手边只有常规的 DataGrid,这可能会有所帮助:

          http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=2&postId=12548

          那里的评论链接到 styleFunction 的文档:

          http://livedocs.adobe.com/flex/3/langref/mx/controls/advancedDataGridClasses/AdvancedDataGridBase.html#styleFunction

          除此之外,Stiggler 对使用 itemRenderer 的建议是您的另一个选择。

          【讨论】:

            【解决方案5】:

            【讨论】:

            • 看起来这样就可以了...谢谢,鲍勃
            猜你喜欢
            • 2011-01-11
            • 2011-11-04
            • 1970-01-01
            • 2013-11-23
            • 2018-02-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多