怎么动态改变DataGrid的列宽

cml244 2011-07-21 09:24:12
由于DataGrid是动态生成的,现在想改变一些列的宽度,真不知怎么改。测试代码如下

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.utils.ObjectProxy;
import com.htmap.control.HTAlert;
private var array:Array = new Array();
private function init():void{
for(var i:int=0;i<10;i++){
var objectProxy:ObjectProxy = new ObjectProxy();
objectProxy["序号"] = i+1;
objectProxy["字段1"] = "fff";
objectProxy["字段2"] = "fff";
objectProxy["字段2"] = "fff";
array.push(objectProxy);
}

myDataGrid.dataProvider = array;
}
]]>
</mx:Script>
<mx:DataGrid id="myDataGrid">

</mx:DataGrid>
</mx:Application>
...全文
248 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
天弈isai 2011-07-28
  • 打赏
  • 举报
回复
自己定义DataGrid类,然后在里面动态设定列宽就可以了

public class InfoDatagridBase extends DataGrid
{
protected var columnArr:Array = [];

public function InfoDatagridBase()
{
super();
}

//-----------------------------------------------
// rowList
//-----------------------------------------------

/**
* DataGrid用
*/
private var _rowList:XMLList;

/**
* rowList Getter
*/
public function get rowList():XMLList
{
return _rowList;
}

/**
* rowList Setterr
*/
public function set rowList(value:XMLList):void
{
_rowList = value;
//trace("data = " + value);
this.dataProvider = rowList;

//Null
if(value.children().length() != 0) {
initDataGrid();
}
else {

}
}


protected function initDataGrid():void
{
//列ID
var colNameArr:Array = new Array();

//列名
var colTitleArr:Array = new Array();

//列種類
var colTypeArr:Array = new Array();

//列
var colEventArr:Array = new Array();

//列幅
var colWidthArr:Array = new Array();

for each(var m:XML in XML(rowList[0]).children()) {
colNameArr.push(m.name());
colTitleArr.push(String(m.@title));
colTypeArr.push(m.@type);
colEventArr.push(m.@event);
colWidthArr.push(m.@width);
}
trace("colNameArr = " + colNameArr);
columnArr = [];

var cssDecl:CSSStyleDeclaration = new CSSStyleDeclaration();
cssDecl.setStyle("textAlign", "center");
cssDecl.setStyle("fontSize", "10");
cssDecl.setStyle("fontWeight", "bold");
cssDecl.setStyle("color", 0xFFFFFF);


for(var index:int; index < colNameArr.length; index++) {
if(String(colTitleArr[index]).length != 0) {
var dgc:DataGridColumn = new DataGridColumn();
dgc.headerWordWrap = true;
dgc.setStyle("textAlign", "center");
dgc.setStyle("fontSize", "9");
dgc.width = colWidthArr[index];
dgc.dataField = colNameArr[index];
dgc.headerText = colTitleArr[index];
dgc.setStyle("headerStyleName", cssDecl);
columnArr.push(dgc);
}
}
this.columns = columnArr;
}

private function sortCompareFunc(field:String):Function
{
return function(obj1:Object, obj2:Object):int{
return ObjectUtil.numericCompare(obj1[field],obj2[field]);
}
}

//----------------------------------
// createChildren
//----------------------------------

override protected function createChildren():void
{
super.createChildren();
}

//----------------------------------
// commitProperties
//----------------------------------

override protected function commitProperties():void
{
super.commitProperties();

this.setStyle("verticalAlign", "middle");
this.setStyle("color", 0x000000);
this.headerHeight = 22;
this.variableRowHeight = true;
//this.rowHeight = Common.QDB_ROW_HEIGHT;
}
}
dormouse1985 2011-07-23
  • 打赏
  • 举报
回复
创建完毕,手动设置每列宽度试试。你这样写是自动帮你生成列(DataGridColumn)的,如果你来控制列的生成就好办多了

4,327

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧