关于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 " ";
}
}
}
当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 " ";
}
}
}
相关阅读 更多 +