2012-07-08 43 views
3

我有一个s:有3列的DataGrid。我想将最后两列中的文本对齐,但无法找到使其工作的方式。我试过创建自定义渲染器并将textAlign设置为正确,但它不起作用。Flex:如何向右对齐s:DataGrid中的单元格?

这里是我的自定义渲染:

<?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"/> 

我真的想知道如何右对齐细胞在网格中。感谢任何能够帮助的人。

回答

1

如果您只需显示文本,请查看DefaultGridItemRenderer类。如果您不指定项目渲染器,则这是Spark DataGrid将使用的内容。

DefaultGridItemRenderer有一个textAlign风格,就像Label一样。

这并不明显,为什么你的自定义渲染器不工作。

+0

谢谢你,现在弄明白了很好的工作。 – 2012-07-08 21:16:12

1

使用itemRenderer进行右对齐的技巧是确保itemRenderer使用包含列的全部宽度或者将其锚定到网格列的右侧。否则,右侧标签中的文本将与不在网格右侧的标签对齐到itemRenderer。

因此,请确保执行项目渲染的组件具有宽度=“100%”或右侧=某事。

下面是一个锚定在网格列右侧的示例。

<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> 
0

鸣谢:我欠了很多在StackOverflow上很多帖子这个 ESP。Number formatting in java to use Lakh format instead of million format

在新的Flex AIR应用程序1个良好的创新我做右对齐 +印度逗号分隔

这是通过自定义项目渲染完成的;需要大量的搜索和代码工作 改编自Java但Java,C#& AS3如此相似,它是一个Cakewalk移植

印度以外没有人喜欢卢克斯和克卢斯;其他人与亿万幸福 但我们印度人认为百万富翁和梦想百万富翁;并找到万美元(10十万)疫confushingh

途中我还没有右对齐一个非常普遍的需求

的Flex标记

<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 Indian Style

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"); 

//右对齐部分

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; 

}

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

我的要求是最近卢比

如果您需要小数点(paise for INR)使用数字 的固定方法并将pat3更改为
var pat3:RegExp = /(\d+)(\d{3}.*)$/;

右对齐的部分是印度逗号

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