是否可以交换flex数据网格的列和行?

时间:2009-07-22 05:33:08

标签: flex datagrid

我有一行,很多列flex datagrid。我想将dataGrid放在一边,以便列标题成为一个向下运行的列和v.v。

有没有办法在DataGrid中执行此操作?

还是我操纵了呈现给网格的数据?如果是这样,你的推荐是什么?

这里的主要想法是我有一个像这样的对象:

x=y
b=u
o=p
u=e
w=p

我想要一个视觉上类似的控件。目前,datagrid将对象显示为:

x b o u w
y u p e p

这对我的情况来说过于横向。 THX

2 个答案:

答案 0 :(得分:1)

我认为您希望将列转换为单个列 这可以通过获取所有列并将in数组作为数据提供者提供来完成。

DataGrid.columns

将返回列。

你可以这样想一下创建列。

public function createColumns():Array{
            var advancedDataGridColumn:AdvancedDataGridColumn;
                var i:int;
                var columnsArray:Array = new Array();
                    for(i=0;i<columns.length;i++){                      
                                advancedDataGridColumn=new AdvancedDataGridColumn();        
                                advancedDataGridColumn.headerText=columns[i].dispheader.toString();
                                advancedDataGridColumn.dataField="@"+columns[i].name.toString();                                
                                advancedDataGridColumn.itemRenderer=new ClassFactory(Styler);                               
                                if(columns[i].descending!=undefined ){
                                    if(columns[i].descending.toString()=="true")
                                        sortField = new SortField("@"+columns[i].name.toString(),false,true,null);
                                    else
                                        sortField = new SortField("@"+columns[i].name.toString(),false,false,null);
                                }

                                if(advancedDataGridColumn.headerText == Constants.price||
                                advancedDataGridColumn.headerText == Constants.quantity||
                                advancedDataGridColumn.headerText == Constants.askPrice||
                                advancedDataGridColumn.headerText == Constants.bidPrice||
                                advancedDataGridColumn.headerText == Constants.netAmount||
                                advancedDataGridColumn.headerText == Constants.interestAmount||
                                advancedDataGridColumn.headerText == Constants.principalAmount||
                                advancedDataGridColumn.headerText == Constants.accruedInterestAmount){
                                    var currencyFormattor:CurrencyFormatter = new CurrencyFormatter();
                                    currencyFormattor.useThousandsSeparator=true;
                                    currencyFormattor.currencySymbol="";
                                    currencyFormattor.thousandsSeparatorFrom=",";
                                    currencyFormattor.thousandsSeparatorTo=",";
                                    advancedDataGridColumn.formatter=currencyFormattor; 
                                }                           

                                columnsArray.push(advancedDataGridColumn);
                        }
            return columnsArray;
        }
抱歉,我刚刚复制了代码,但我认为它会对你有帮助。

答案 1 :(得分:1)

将DataGrid设置为只有2列,并将原始数据集转换为{propName,propValue}的数组集合。

说你有:

var originalDataSet : ArrayCollection;
var dataSet : ArrayCollection;
var columnSet : ArrayCollection;

获得原始值后,您将执行以下操作:

dataSet = new ArrayCollection();

for (var i : int; i < originalDataSet.length; i++)
{
    dataSet.addItem({name : columnSet.getItemAt(i), value : originalDataSet.getItemAt(i)});
}

myDataGrid.dataProvider = dataSet;//set the data provider of the grid to the transformed data set.

澄清:

{name : columnSet.getItemAt(i), value : originalDataSet.getItemAt(i)}

这将创建一个Object类型的新实例,并将名称和值动态属性分配给它们各自的值。您可能希望使用可绑定属性定义自己的类,而不是这样。请注意,属性名称仅用于此示例,因为我不知道您实际使用的是什么。

此时的数据网格应该有两个由您定义的列,并相应地设置其dataField属性。此外,此示例假定columnSet集合包含要垂直显示的“水平列”。如果您可以根据originalDataset中的值获取这些值,则可能甚至不需要columnSet。