我有一行,很多列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
答案 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。