文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于hibernate传来 数据的 datagrid读取

关于hibernate传来 数据的 datagrid读取

时间:2008-06-11  来源:qbq

很早以前问过这个问题。
当hibernate传出的list里每条记录的属性中是包含另一个对象时,datagrid是无法读取的,比如User 的属性 group 是一个 group对象,传来的数据xml是
<list>
  <User>
    <uid>123</uid>
    <uname>cimmicola</uname>
    <group>
      <groupid>11<groupid>
      <groupname>管理组<groupname>
    </group>
  </User>
  <User>
    <uid>123</uid>
    <uname>cimmicola</uname>
    <group>
      <groupid>11<groupid>
      <groupname>管理组<groupname>
    </group>
  </User>
  <User>
    <uid>123</uid>
    <uname>cimmicola</uname>
    <group>
      <groupid>11<groupid>
      <groupname>管理组<groupname>
    </group>
  </User>
</list>

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: <mx:Button x="505.5" y="69" label="显示" color="#0600FF" click="init(showDataGrid)"/>

<mx:DataGrid id="showDataGrid" x="0" y="0" width="659" height="419"></mx:DataGrid>


2、ActionScript.class  代码

  CODE: private var dataGridObj:Object=null;

/** 获取数据 */
public function init(obj:Object):void{
    dataGridObj=obj;
    var myXMLURL:URLRequest = new URLRequest("http://127.0.0.1:8080/air/first";);
    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 " ";
         }
    }
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载