【问题标题】:Datagrid item rendering数据网格项渲染
【发布时间】: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;

    }  


}     

}

【问题讨论】:

    标签: apache-flex actionscript


    【解决方案1】:

    您是否尝试过让项目渲染器只是一个 textArea?

    【讨论】:

      猜你喜欢
      • 2015-07-09
      • 1970-01-01
      • 2021-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多