Actionscript 3 无法在Datagrid中对齐数据

Actionscript 3 无法在Datagrid中对齐数据,actionscript-3,apache-flex,flex4,flex3,flex4.5,Actionscript 3,Apache Flex,Flex4,Flex3,Flex4.5,您好,渲染后spark datagrid列中的数据对齐有问题。所有的标题都向左对齐,但是我想做以下事情 1.在列标题名称中间。 2.将文本向右对齐。 3.冻结第一列,以便在水平滚动时,第一列不应水平移动 在这方面的任何帮助都将不胜感激 谢谢和问候 <?xml version="1.0" encoding="utf-8"?> <s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"

您好,渲染后spark datagrid列中的数据对齐有问题。所有的标题都向左对齐,但是我想做以下事情 1.在列标题名称中间。 2.将文本向右对齐。 3.冻结第一列,以便在水平滚动时,第一列不应水平移动

在这方面的任何帮助都将不胜感激

谢谢和问候

<?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[
            import flashx.textLayout.formats.BackgroundColor;

            import mx.controls.Alert;
            import mx.states.SetStyle;

            private const POSITIVE_COLOR:uint = 0x000000; // Black
            private const NEGATIVE_COLOR:uint = 0xFF0000; // Red

            override public function prepare(hasBeenRecycled:Boolean):void {

                if (this.data) {
                    if (column.labelFunction != null ) {
                        lblData.text = column.labelFunction( data, column );

                        setStyle("color", (parseInt(this.data.st1) < 0) ? NEGATIVE_COLOR : POSITIVE_COLOR);

                    } else {
                        lblData.text = data[column.dataField];
                    }
                }
            }
        ]]>
    </fx:Script>

    <s:Label id="lblData" top="9" left="7" textAlign="right"/>

</s:GridItemRenderer>

2/将文本向右对齐

我从最简单的开始。
在自定义项目渲染器中,您仍然向左对齐(
left=“7”
)。您有两个选项可以修复此问题:

<s:Label id="lblData" top="9" right="7"/>

将标签向右对齐,并导致文本向左溢出

<s:Label id="lblData" top="9" left="7" right="7" textAlign="right"/>

将使标签占据所有可用空间,将文本向右对齐,如果文本太大,则将其截断

1/在列标题名称中间

我认为唯一的方法是创建一个定制的headerRenderer

  • 复制整个DefaultGridHeaderRenderer
  • 查找id为“labelDisplay”的标签
  • 将其
    textAlign
    属性更改为
    center
  • 指定自定义的headerRenderer:
3/冻结第一列,以便在水平滚动时,第一列不应水平移动

恐怕这将需要一些严重的黑客攻击。如果您不想深入并创建定制的DataGrid,我认为您最好的选择是伪造它:

  • 创建一个列表来表示固定列
  • 创建一个DataGrid来表示其他列
  • 关闭列表的垂直滚动条:您想控制网格中的滚动
  • 绑定其垂直滚动位置:当DataGrid垂直滚动时,列表必须跟随,反之亦然
  • 绑定所选项目
  • 进行一些蒙皮,使其看起来像一个数据网格

我要补充的一点是,原始MX DataGrid确实具有可用于冻结列的lockedColumnCount属性:。如果这很重要,切换回MX组件可能比尝试解决方法更容易。@www.Flextras.com谢谢。我不知道那件事。在Flex3中没有做太多工作。似乎有一些东西我错过了。如果你想锁定行,也有一个lockedRowCount。无论什么价值,这两个都和MX DataGrid一样“防弹”。至于冻结spark DataGrid中的第一列,您还可以深入网格的布局并进行一些复杂的修改,比如覆盖网格本身的
GridLayour
中的一些功能,以及覆盖标题的
LayoutBase
。或者你可以像RIAstar所说的那样制作双双网格或列表+网格并进行一些蒙皮,但是通过这样做,我很确定会出现一些数据同步和视觉问题。非常感谢RIAstar。当我使用DefaultGridHeaderRenderer时,当我水平滚动时,标题似乎会环绕/展开。对此有任何解决方案吗?