Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30465556
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: 系统运维

2008-06-11 11:27:15

很早以前问过这个问题。
当hibernate传出的list里每条记录的属性中是包含另一个对象时,datagrid是无法读取的,比如User 的属性 group 是一个 group对象,传来的数据xml是

 
    123
    cimmicola
   
      11
      管理组
   

 

 
    123
    cimmicola
   
      11
      管理组
   

 

 
    123
    cimmicola
   
      11
      管理组
   

 



datagrid只能读取到uid、uname、读取group就会显示[object object]
上上周解决了这个问题,处于项目原因,一直没有把这个解决方案贴上来

现在分享给大家
查看DataGridColumn的源码,发现itemToLabel方法中读取字段是用的data=data[ dataField ] 也就是说,只能读取一层属性
于是写了个类,继承DataGridColumn,然后override这个方法
将这句话替换成
if ( dataField.indexOf(".")>-1){
  var arr:Array=dataField.split(".");
  for (var e in arr){
      data=data[arr[e]];
  }
  trace(data);
}else{
  data =data[dataField];
}

这样在页面上引用自己的这个gridcolumn类,取值的时候就可以用  dataField="group.groupname"来取得group对象里面的groupname属性值了。
 
 
 
这个已经测试成功:
下面这样写,当点击“显示按钮”时,无法把取到的值赋给 DataGrid 呢?

----------------------------------------------------------------------------------------------------------------------------

1、MXML 代码

 
CODE:




2、ActionScript.class  代码

 
CODE:
private var dataGridObj:Object=null;

/** 获取数据 */
public function init(obj:Object):void{
    dataGridObj=obj;
    var myXMLURL:URLRequest = new URLRequest("";);
    var myLoader:URLLoader = new URLLoader(myXMLURL);
    myLoader.addEventListener(Event.COMPLETE,init_ConnectOK);
}
       
/** 生成数据 */
private function init_ConnectOK(eveObj:Event):void{
    var myXML:XML = XML(eveObj.currentTarget.data); 

    dataGridObj.dataProvider = myXML;  <----------------------------------------------  这个地方要怎么写呢,我这样写取不到数

}
 
 
 
这个正在测试:
请问这个继承有问题吗?为什么在DataGrid中不现实这个DataGridColumn呢

package
{
    import mx.controls.dataGridClasses.DataGridColumn;
    import mx.controls.DataGrid;
   
public class MyDataGridColumn extends DataGridColumn
{
     var owner:DataGrid;
       
      public function MyDataGridColumn(columnName:String = null){
     super(columnName);
      }
       
      override public function itemToLabel(data:Object):String{
          if (!data)
              return " ";

        if (labelFunction != null)
            return labelFunction(data, this);

        if (owner.labelFunction != null)
            return owner.labelFunction(data, this);

        if (typeof(data) == "object" || typeof(data) == "xml")
        {
            try
            {
                if ( dataField.indexOf(".")>-1){
                 var arr : Array = dataField.split(".");
               for (var e in arr)
        data = data[arr[e]];
    }else{
               data = data[dataField];
    }
            }
            catch(e:Error)
            {
                data = null;
            }
        }

        if (data is String)
            return String(data);

        try
        {
            return data.toString();
        }
        catch(e:Error)
        {
        }

        return " ";
         }
    }
}
阅读(1588) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~