Flex自动调整DataGrid控件的列宽的方法

2015-01-20

在Flex API中,DataGrid(表格)控件的列宽并不能根据单元格的内容来自动调整,所以只能自己动手了,以下是方法:

public function autoSetDataGridWidth(dataGrid:DataGrid,
                                    lengthFix:Number=0,
                                    settingType:uint=0):void
{
	//dataGrid为需要调整列宽的表格对象
	//setingType为设置类型,0为不可调整表格整体宽度,1为可调整表格整体宽度
	//lengthFix为表格宽度的修正,数值越大表格越宽,推荐数值为0.0-1.5,默认字号,表格内容为纯汉字推荐用1.0

  //起始和终止的表格宽度,调整列宽不能改变表格宽度
	const DATA_GRID_WIDTH:Number = dataGrid.width;
  //当前表格宽度
	var gridWidth:Number = 0;
	var dataProvider:IList = dataGrid.dataProvider;
	var column:GridColumn;
	var colWidth:Number = 0.0;

	//得出各列的列宽
	var gridColumnCounts:int = dataGrid.columnsLength;
	for(var i:uint = 0; i<gridColumnCounts; i++)
	{
		//根据列标题来获取列宽值
		column = dataGrid.columns.getItemAt(i) as GridColumn;
		colWidth = (column.headerText.length+lengthFix) * dataGrid.getStyle("fontSize");

		//根据该列中,每一行的内容来获取列宽值
		var dataLength:uint
		if(dataProvider)
			dataLength = dataProvider.length;
		else
			dataLength = 0;

		var width:Number = 0;
		for(var j:uint=0; j<dataLength; j++)
		{
			var content:Object = dataProvider.getItemAt(j);
			var contentLength:int = content[column.dataField].length + lengthFix;
			width = contentLength*dataGrid.getStyle("fontSize");
			//列宽值取较大者
			colWidth = width > colWidth ? width : colWidth;
		}
		column.width = colWidth;
		gridWidth += colWidth;
	}

	if(settingType == 0)//根据当前表格宽度和实际表格宽度的比值,调整各列的列宽
	{
		var scale:Number = DATA_GRID_WIDTH / gridWidth;
		for(i=0; i<dataGrid.columnsLength; i++)
		{
			column = dataGrid.columns.getItemAt(i) as GridColumn;
			column.width * = scale;
		}
	}
  //调整表格的宽度
  else
	{
		dataGrid.width = gridWidth;
  }
}

该方法效率不太高,需要遍历所有的内容,在表格内容很庞大的情况下不推荐使用。

noBorder

除非另有声明,本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

文章评论



章节列表