前几天开始学习FLEX,想将从OPENAMF返回的数据绑定到DataGrid中,尝试了两种方法:
方法一:
OPENAMF代码(JAVA):
//查询会员
public List QueryMember(String userid)...{
String sql="";
if(userid.equals(""))...{
sql="select * from "+sysTableName;
}else...{
sql="select * from "+sysTableName+" where suserid='"+userid+"'";
}
Connection connection=null;
Statement stmt=null;
ResultSet rs=null;
List<Object> managerInfoList = new ArrayList<Object>();
try...{
Driver theDriver=(Driver)Class.forName(driverName).newInstance();
connection=DriverManager.getConnection(url);
stmt=connection.createStatement();
rs=stmt.executeQuery(sql);
while (rs.next())...{
List<Object> infoList = new ArrayList<Object>();
infoList.add(rs.getObject("suserid"));
infoList.add(rs.getObject("susername"));
infoList.add(rs.getObject("ssex"));
infoList.add("");
infoList.add(rs.getObject("stype"));
infoList.add(rs.getObject("susermoney"));
infoList.add(rs.getObject("semail"));
infoList.add(rs.getObject("sqq"));
infoList.add(rs.getObject("surl"));
infoList.add(rs.getObject("sdate"));
infoList.add(rs.getObject("sphoto"));
managerInfoList.add(infoList);
}

}catch(Exception e)...{
System.out.println(e);
}finally...{
try...{
rs.close();
stmt.close();
connection.close();
}catch(Exception e)...{
}
}
return managerInfoList;
}这样返回的结果是一个二维数组,这个二维数组在FLEX是不能直接绑定到DataGrid中的,要做一次转换:

function onQueryAllMemberResult(result:Object):void ...{
var memberTableName:Array=["帐号","呢称","性别","密码","类型","S币","E-MAIL","QQ","个人网站","注册时间","头像"];
for(var what:* in result)...{
for(var that:* in result[what])...{
trace(that+"result:"+result[what][that]);
}
}
trace("aa:"+result[0]["性别"]);
var dataArray:Array=new Array();
for(var i:uint=0;i<result.length;i++)...{
var temp:Dictionary=new Dictionary();
for(var j:uint=0;j<result[i].length;j++)...{
temp[memberTableName[j]]=result[i][j];
}
dataArray.push(temp);
}
memberManager_dg.dataProvider=dataArray;
}之所以加上memberTableName这个数组是因为我的DataGrid是这样定义的:
<mx:DataGrid width="98%" height="90%" horizontalCenter="-1" id="memberManager_dg" fontSize="12" textAlign="center" y="10">
<mx:columns>
<mx:DataGridColumn headerText="帐号" dataField="帐号"/>
<mx:DataGridColumn headerText="呢称" dataField="呢称" width="100"/>
<mx:DataGridColumn headerText="性别" dataField="性别" width="35"/>
<mx:DataGridColumn headerText="密码" dataField="密码" width="35"/>
<mx:DataGridColumn headerText="类型" dataField="类型" width="35"/>
<mx:DataGridColumn headerText="S币" dataField="S币" width="100"/>
<mx:DataGridColumn headerText="E-MAIL" dataField="E-MAIL" width="180"/>
<mx:DataGridColumn headerText="QQ" dataField="QQ" width="100"/>
<mx:DataGridColumn headerText="个人网站" dataField="个人网站" width="200"/>
<mx:DataGridColumn headerText="注册时间" dataField="注册时间" width="180"/>
<mx:DataGridColumn headerText="头像" dataField="头像" width="90"/>
</mx:columns>
</mx:DataGrid>很显然,这样转换一次比较麻烦,如果要直接将数组绑定到DataGrid的dataProvider上,就要在JAVA来改变了,要使用哈希表来处理:
//查询会员
public List QueryMember(String userid)...{
String sql="";
if(userid.equals(""))...{
sql="select * from "+sysTableName;
}else...{
sql="select * from "+sysTableName+" where suserid='"+userid+"'";
}
Connection connection=null;
Statement stmt=null;
ResultSet rs=null;
List<Object> managerInfoList = new ArrayList<Object>();
try...{
Driver theDriver=(Driver)Class.forName(driverName).newInstance();
connection=DriverManager.getConnection(url);
stmt=connection.createStatement();
rs=stmt.executeQuery(sql);
while (rs.next())...{
//List<Object> infoList = new ArrayList<Object>();
Map<Object,Object> infoListHashMap=new HashMap<Object,Object>();
infoListHashMap.put("帐号",rs.getObject("suserid"));
infoListHashMap.put("呢称",rs.getObject("susername"));
infoListHashMap.put("性别",rs.getObject("ssex"));
infoListHashMap.put("密码","");
infoListHashMap.put("类型",rs.getObject("stype"));
infoListHashMap.put("S币",rs.getObject("susermoney"));
infoListHashMap.put("E-MAIL",rs.getObject("semail"));
infoListHashMap.put("QQ",rs.getObject("sqq"));
infoListHashMap.put("个人网站",rs.getObject("surl"));
infoListHashMap.put("注册时间",rs.getString("sdate"));
infoListHashMap.put("头像",rs.getObject("sphoto"));
System.out.println(infoListHashMap);
managerInfoList.add(infoListHashMap);
}
System.out.println(managerInfoList);

}catch(Exception e)...{
System.out.println(e);
}finally...{
try...{
rs.close();
stmt.close();
connection.close();
}catch(Exception e)...{
}
}
return managerInfoList;
}

本文介绍如何将OPENAMF返回的数据绑定到FLEX的DataGrid组件中。通过两种方法实现:一种是在FLEX端进行数据转换,另一种是在JAVA端使用哈希表处理数据。
6631

被折叠的 条评论
为什么被折叠?



