前几天开始学习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;
}
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;
}
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 >
< 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;
}
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;
}