在这里向大家介绍一下Flex通过调用.net WebService进行数据查询和显示的实现。对于Flex的介绍就不描述,有兴趣的朋友可以到Adobe的官方站了解(http://www.adobe.com/devnet/flex/)。Flex提供了RemotingHttpService,WebService等对象进行网络数据交互。在本文所用到的对象是WebService,它提供了方便灵活的WebService方法调用。

       先看本文例子的效果图:

       Flex调用WebService进行数据查询和显示(调整)

 

       建立基于NorthWind.Employees表的数据查询方法。

 

       public string ListEmployees()//获取所有雇员返回相关的XML格式字符串

<Employees>

    <Item>

        <EmployeeID>1</EmployeeID>

        <EmployeeName>NancyDavolio</EmployeeName>

        <Title>Sales Representative</Title>

    </Item>

    <Item>

        <EmployeeID>2</EmployeeID>

        <EmployeeName>AndrewFuller</EmployeeName>

        <Title>Vice President, Sales</Title>

    </Item>

</Employees>

 

       public string GetEmployee(int employeeid)//获取指定索引雇员信息的XML格式字符串

<Body>

    <Item>

        <EmployeeID>1</EmployeeID>

        <FirstName>Nancy</FirstName>

        <LastName>Davolio</LastName>

        <Title>Sales Representative</Title>

        <TitleOfCourtesy>Ms.</TitleOfCourtesy>

        <BirthDate>1948-12-8 0:</BirthDate>

        <HireDate>1992-5-1 0:</HireDate>

        <Address>507 - 20th Ave. E. Apt. 2A</Address>

        <City>Seattle</City>

        <Region>Seattle</Region>

        <PostalCode>98122</PostalCode>

        <Country>USA</Country>

        <Notes></Notes>

        </Item>

    <Error>

    </Error>

</Body>

       在这里可能有人问为什么不直接返回可以序列化的对象,这样不是更方便吗?刚开始时我想直接返回DataSet但是Flex并不支持会产生调用错误(具体情况还在查找中)。虽然返回的是XML的字符串,但Flex提供灵活的XML文本处理对象直接支持XML文件转换成对象操作(这功能很喜欢,不知道C#3.0是否提供)

 

Flex中定义WebService访问对象:

 <mx:WebService

        fault="Alert.show(event.fault.faultString), 'Error'">

        <mx:operation name="ListEmployees" resultFormat="object" result="EmployeeList(event)">

        </mx:operation>

        <mx:operation name="GetEmployee" resultFormat="object" result="GetObj(event)">

            <mx:request>

                <employeeid>{employeeList.selectedItem.EmployeeID}</employeeid>

            </mx:request>

        </mx:operation>

</mx:WebService>

 

operation是描述相关方法。

result 是方法调用完成后的委托方法。

request 是描述相关方法的参数,通过{employeeList.selectedItem.EmployeeID}把参数值指定到相关对象的属性上。

可以通过WS.GetEmployee()来进行相关方法的调用。

 

调用GetEmployee方法后的处理代码:

function EmployeeList(event:ResultEvent):void

                 {

                        var doc:XMLDocument = new XMLDocument(event.result.toString());

                        var obj:XML;

                        var employees:Array = new Array();

                        for(var i:int=0;i<doc.firstChild.childNodes.length;i++)

                        {

                               obj = new XML(doc.firstChild.childNodes[i].toString());//创建一个XML对象,直接支持对象属性访问。

                               employees.push(obj);

                              

                        }

                       

                        employeeList.dataProvider=employees;//把数据源绑定到列表中

                       

                       

                 }

 

调用GetObj方法后处理的代码:

function GetObj(event:ResultEvent)

                 {

                        var re:XML = new XML(event.result.toString());

                        if(re.Error != null && re.Error !="")

                        {

                               Alert.show(re.Error);

                               return;

                        }

                        editAddress.text= re.Item.Address;

                        editBirthDate.text = re.Item.BirthDate;

                        editCity.text = re.Item.City;

                        editCountry.text = re.Item.Country;

                        editEmployeeID.text = re.Item.EmployeeID;

                        editFirstName.text = re.Item.FirstName;

                        editLastName.text = re.Item.LastName;

                        editNotes.text = re.Item.Notes;

                        editPostalCode.text = re.Item.PostalCode;

                        editRegion.text = re.Item.Region;

                        editTitle.text = re.Item.Title;

                        editTitleOfCourtesy.text = re.Item.TitleOfCourtesy;

                        editHireDate.text = re.Item.HireDate;

                 }

从上面的代码可以看到XML是一个非常灵活的对象,它可以把XML格式的字符串转成相关对象进行操作。

 

一个简单的调用WebServie方法进行数据查询和显示就完成了,看上去是不是很简单方便。不过Flex是基于FlashActivex表现的,本质上和传统的JavaScript结合Html有很大差别。

 

对于WebService的实现代码就不详细讲了,相信大家在VS.NET下写WebService已经熟悉了。

下载相关代码


调整
定发现Flex在数据绑定这方面做得很好,正如沐枫所说 所有数据通过属性绑定就能完成工作。
.NET WebService返回的对象,Flex也能够很好地支持并不需要做特别的修改。
以下调整MXML文件后的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application  initialize="OnInit()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" cornerRadius="20" borderColor="#8080ff" viewSourceURL="srcview/index.html">
 <mx:Form width="100%" height="61" >

        <mx:operation name="ListEmployees" resultFormat="object" >
        </mx:operation>
        <mx:operation name="GetEmployee" resultFormat="object" >
            <mx:request>
                <employeeid>{employeeList.selectedItem.EmployeeID}</employeeid>
            </mx:request>
        </mx:operation>
    </mx:WebService>

</mx:Application>

相关的WebService方法:

[WebMethod]

         [System.Xml.Serialization.XmlInclude(typeof(EmployeeItem))]

         public ArrayList  ListEmployees()

         {

             

              SqlCommand cmd = new SqlCommand("select * from employees");

              ArrayList list = new ArrayList();

              using(SqlConnection conn = new SqlConnection(ConnectionString))

              {

                  

                   conn.Open();

                   cmd.Connection = conn;

                   using(IDataReader reader = cmd.ExecuteReader())

                   {

                       while(reader.Read())

                       {

                            EmployeeItem item = new EmployeeItem();

                            item.EmployeeID = reader["EmployeeID"].ToString();

                            item.EmployeeName = reader["FirstName"].ToString()+reader["LastName"];

                            item.Title = reader["Title"].ToString();

                            list.Add(item);

                       }

                      

                   }

              }

              return list;

             

         }

        

         [WebMethod]

         public ItemInfo  GetEmployee(int employeeid)

         {

             

              ItemInfo info = new ItemInfo();

              SqlCommand cmd = new SqlCommand("select * from employees where employeeid=" +employeeid);

              using(SqlConnection conn = new SqlConnection(ConnectionString))

              {

                  

                   conn.Open();

                   cmd.Connection = conn;

                   using(IDataReader reader = cmd.ExecuteReader())

                   {

                       if(reader.Read())

                       {

                            info.EmployeeID =reader["EmployeeID"].ToString();

                            info.FirstName =reader["FirstName"].ToString();

                            info.LastName =reader["LastName"].ToString();

                            info.Title =reader["Title"].ToString();

                            info.TitleOfCourtesy =reader["TitleOfCourtesy"].ToString();

                            info.BirthDate =(DateTime)reader["BirthDate"];

                            info.HireDate =(DateTime)reader["HireDate"];

                            info.Address =reader["Address"].ToString();

                            info.City =reader["City"].ToString();

                            info.Region=reader["Region"].ToString();

                            info.PostalCode =reader["PostalCode"].ToString();

                            info.Country =reader["Country"].ToString();

                            info.Notes =reader["Notes"].ToString();

                           

                       }

                      

                   }

              }

              return info;

             

         }



调整后的代码

相关文章:

  • 2021-11-18
  • 2021-08-23
  • 2022-12-23
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-26
  • 2021-09-20
  • 2022-02-11
  • 2022-12-23
  • 2022-12-23
  • 2021-12-16
  • 2022-12-23
相关资源
相似解决方案