【发布时间】:2009-05-20 15:55:12
【问题描述】:
我试图在 Datagrigd 列中呈现大约 10 个字符串与 with 连接在一起的 html 文本。我能够渲染它,但不能渲染到单元格的大小。我试图将其嵌入 HBox 中,然后将其放入单元格中。但是我无法调整单元格的大小,因为我看到 HBox 正在缩小,即使单元格中有足够的空间。有人可以帮我把这个 HBox 安装到 Datagrid 单元格的大小。
我尝试使用 UpdateDisplayList() 但它进入了无限循环并且屏幕正在冻结。请在下面找到代码。
下面是调用渲染器的类。有人可以帮帮我吗。
package components.myReports { 导入 mx.collections.ArrayCollection; 导入 mx.containers.HBox; 导入 mx.containers.VBox; 导入 mx.controls.DataGrid; 导入 mx.controls.dataGridClasses.DataGridColumn; 导入 mx.core.ClassFactory; 导入渲染器.HtmlTextRenderer;
public class MyReportsComponent extends VBox
{
[Bindable]
// public var meterList:ArrayCollection = model.Lookups.getInstance().metersList;
private var _reportsList:ArrayCollection;
private var myReports:ArrayCollection = new ArrayCollection([
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:"" },
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""},
{name:"Christina Coenraets",description:"myReports1", dateRefreshed:"05-18-2009", dateCreated:"05-18-2009" , scheduledTime: "05-18-2009",operations:""}
]);
public function MyReportsComponent()
{
//TODO: implement function
super();
}
public function set reportsList(arr:ArrayCollection):void{
_reportsList = arr
}
override protected function createChildren():void {
var dataGrid:DataGrid ;
var dataGridColumn:DataGridColumn;
var mainContainer:HBox;
this.removeAllChildren();
mainContainer = new HBox();
mainContainer.width = this.parent.width;
mainContainer.minHeight = 1000;
mainContainer.horizontalScrollPolicy = "off";
mainContainer.verticalScrollPolicy = "of";
mainContainer.percentHeight = 100;
mainContainer.percentWidth = 75;
dataGrid = new DataGrid();
var row:Array=new Array("name","description","dateRefreshed","dateCreated","scheduledTime","operations");
var colName:String;
var gridcolumns:Array=new Array();
for(var i:int=0;i<row.length;i++)
{
dataGridColumn=new DataGridColumn();
dataGridColumn.dataField=row[i].toString();
trace(row[i].toString());
if(row[i].toString()== "operations")
{
dataGridColumn.itemRenderer = new ClassFactory(HtmlTextRenderer);
dataGridColumn.width = 200;
}else {
dataGridColumn.width = 70;
}
dataGridColumn.resizable=true;
gridcolumns.push(dataGridColumn);
}
dataGrid.columns = gridcolumns;
dataGrid.width = 700;
dataGrid.height= 400;
dataGrid.dataProvider = myReports;
mainContainer.addChild(dataGrid);
this.addChild(mainContainer);
this.validateNow();
}
}
}
渲染器-----
打包渲染器 { 导入 mx.containers.HBox; 导入 mx.controls.TextArea;
public class HtmlTextRenderer extends HBox
{
private var text:Array=new Array("Edit","Delete","Run","EMail","RetrieveFile","Public","Private","SharedReport","ScheduledReport");
private var html:String = null;
public var operations:TextArea;
public function HtmlTextRenderer()
{
//TODO: implement function
super();
}
override protected function createChildren():void
{
super.createChildren();
for(var i:int = 0 ;i < text.length ;i++)
{
html+=targetHTML(text[i].toString());
}
operations = new TextArea();
operations.htmlText = html;
this.percentWidth = 100;
this.percentHeight = 100;
this.addChild(operations);
}
private function targetHTML(name:String):String
{
return "<a href='event:" + name + "'>" + name + "</a>";
}
/* override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
super.updateDisplayList(unscaledWidth,unscaledHeight);
} */
private function updateSize()
{
var w:int = this.measuredWidth +100;
trace("The width of the Text is "+this.measuredWidth);
this.width = w;
this.parent.width = w;
}
}
}
【问题讨论】: