3

我有一个 s:DataGrid 有 3 列。我想右对齐最后两列中的文本,但找不到让它工作的方法。我尝试创建自定义渲染器并将 textAlign 设置为正确,但它不起作用。

这是我的自定义渲染器:

<?xml version="1.0" encoding="utf-8"?>

<fx:Script>
    <![CDATA[
    ]]>
</fx:Script>

<s:Label id="lblData" top="9" left="7" text="{data.outgoingCount}" fontWeight="bold" textAlign="right"/>

我真的很想知道如何正确对齐网格中的单元格。感谢任何可以提供帮助的人。

4

4 回答 4

2

如果您只需要显示文本,请查看DefaultGridItemRenderer类。如果您不指定项目渲染器,这就是 SparkDataGrid将使用的。

DefaultGridItemRenderer有一种textAlign风格Label

您的自定义渲染器无法正常工作的原因并不明显。

于 2012-07-08T20:33:02.310 回答
1

使用 itemRenderers 右对齐的技巧是确保 itemRenderer 要么用完包含列的整个宽度,要么锚定到网格列的右侧。否则,标签中的文本将与 itemRenderer 对齐,就像不在网格右侧的标签一样。

因此,请确保进行项目渲染的组件具有 width="100%" 或 right=something。

这是一个锚定到网格列右侧的示例。

<s:DataGrid>
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="Artist"  width="100"/>
            <s:GridColumn dataField="Price"  width="100">
                <s:itemRenderer>
                    <fx:Component>
                        <s:GridItemRenderer>
                            <s:Label id="labelDisplay" textAlign="right" right="3" height="100%" verticalAlign="middle"/>
                        </s:GridItemRenderer>
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>
            <s:GridColumn dataField="Album"/>
        </s:ArrayList>
    </s:columns>
    <s:dataProvider>
        <s:ArrayList>
            <fx:Object>
                <fx:Artist>Pavement</fx:Artist>
                <fx:Price>11.99</fx:Price>
                <fx:Album>Slanted and Enchanted</fx:Album>
            </fx:Object>
            <fx:Object>
                <fx:Price>11.99</fx:Price>
                <fx:Artist>Pavement</fx:Artist>
                <fx:Album>Brighten the Corners</fx:Album>
            </fx:Object>
        </s:ArrayList>
    </s:dataProvider>
</s:DataGrid>
于 2013-07-15T11:15:36.070 回答
0

致谢:我非常感谢 STACKOVERFLOW 中为这个 Esp 发表的许多帖子。java中的数字格式使用Lakh格式而不是百万格式

在新的 Flex AIR 应用程序 1 中,我做了RIGHT ALIGN + 印度逗号分隔

这是通过自定义项目渲染完成的;需要大量的搜索和代码工作改编自 Java,但 Java、C# 和 AS3 非常相似,移植起来简直是小菜一碟

在印度以外,没有人喜欢十万和千万;其他人对百万亿感到满意,但我们印度人认为十万和梦想千万;并找到百万(100 万)thora confushingh

途中我也做了 RIGHT ALIGN 一个非常普遍的需求

弹性标记

<s:GridColumn id="dmbtr" headerText="Amt (INR)" dataField="dmbtr" >
  <s:itemRenderer>
    <fx:Component>
      <s:GridItemRenderer>
        <s:Label id="MyText" top="9" left="7" alpha="1"
                 text="{leftPad(data.dmbtr,10)}"
                 fontFamily="Lucida Console" textAlign="right"/>
      </s:GridItemRenderer>
    </fx:Component>
  </s:itemRenderer>
</s:GridColumn>

AS3 功能

public function leftPad(inp:Number,size:int):String {

  var lstr:String=Math.round(inp).toString();

// LAKHS CRORES 印度风格

  var pat3:RegExp = /(\d+)(\d{3})$/;
  lstr = lstr.replace(pat3, "$1,$2");

  var pat2:RegExp = /(\d+)(\d{2},.+)/;

  var pat1:RegExp = /\d{3,},.+/;

  while(lstr.match(pat1)) 
    lstr = lstr.replace(pat2, "$1,$2");

// RIGHT ALIGN 部分

  var strLen:int = lstr.length;
  var padLen:int = size - strLen;

  if (padLen <= 0) 
    return lstr;  

  var myspaces:String="                    ";  // 20 OK

  return myspaces.substring(0,padLen)+lstr;

}

诀窍是左垫并使用固定宽度的字体

我的要求是最近的卢比

如果您需要小数(为 INR 计算),请使用 toFixed 方法 Number 并将 pat3 更改为
var pat3:RegExp = /(\d+)(\d{3}.*)$/;

右对齐部分在印度逗号之后

于 2014-04-27T12:21:26.977 回答
0

最好和最简单的方法:

<s:DataGrid>  
...  
    <s:columns>  
        <s:ArrayList>  
            <s:GridColumn id="col3" dataField="price" headerText="Price">
                <s:itemRenderer>
                    <fx:Component>
                        <s:DefaultGridItemRenderer textAlign="center" />
                    </fx:Component>
                </s:itemRenderer>
            </s:GridColumn>
            ...
        </s:ArrayList>
    </s:columns>
...
</s:DataGrid>

来源:https ://forums.adobe.com/thread/863955?tstart=0

于 2014-10-11T13:24:48.540 回答