Flex Vertical Datagrid

Lin*_*Lin 12 apache-flex datagrid

我可以有一个垂直显示数据而不是水平显示数据的数据网格吗?

例如,如果这是我的数据提供者:

array('firstname':'John','lastname':'Doe'),
array('firstname':'Jack','lastname':'Jill')
Run Code Online (Sandbox Code Playgroud)

我希望数据显示如下:

Fields        Value1    Value2
Firstname     John      Jack
Lastname      Doe       Jill
Run Code Online (Sandbox Code Playgroud)

等等....最好的方法来实现这个..如果我必须扩展datagrid组件,请解释如何..

Jon*_*wny 4

所以这是一个黑客......但事实证明你不能轻易改变 Spark 数据网格的流程。据我所知,您需要覆盖其中的几乎每个组件,并且需要很长时间。DataGrid 使用自己的布局,并且似乎非常注重 1 行 = 1 条数据的主题。

所以...开始破解:

<s:DataGrid rotation="270">
  <s:columns>
    <s:ArrayList>
      <s:GridColumn itemRenderer="unrotate" headerRenderer="headerUnrotate"/>
      <s:GridColumn itemRenderer="unrotate" headerRenderer="headerUnrotate"/>
    </s:ArrayList>
  </s:columns>
</s:DataGrid>
Run Code Online (Sandbox Code Playgroud)

好吧……我做了什么?我只是旋转整个数据网格。我该如何解决这个问题,这样我们就不必倾斜你的头?我取消旋转 itemrenderer 中的每一列。神圣黑客蝙蝠侠。

这是项目渲染器取消旋转:

<?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" clipAndEnableScrolling="true">

<fx:Script>
    <![CDATA[
        override public function prepare(hasBeenRecycled:Boolean):void {
            lblData.text = data[column.dataField]
        }
    ]]>
</fx:Script>

<s:Label id="lblData" top="9" left="7" rotation="90"/>

</s:GridItemRenderer>
Run Code Online (Sandbox Code Playgroud)

头代码类似,只需旋转 90 度即可回到我们开始的位置。我知道这个解决方案远非完美,但它是我能想到的最好的解决方案,而且不会完全扰乱 DataGrid 类

您可能还需要覆盖皮肤以提供更宽的标头...这实际上是一个更高的标头,因为我们旋转了 270 度。除此之外,它实际上应该可以正常工作......