2012-03-19 76 views
0

我想从wcf服务的数据绑定到网格silverlight应用程序。Silverlight Wcf绑定网格

我正在这样做。

这是我的服务类

public class Employee 
    { 
     public string Adres { get; set; } 
     public string Country { get; set; } 
     public string City { get; set; } 
     public string Region { get; set; } 
    } 

    public List<Employee> CustomerList() 
      { 

       OracleConnection conn = new OracleConnection("connectionstring"); 
       OracleCommand cmd = new OracleCommand(); 
       var custList = new List<Employee>(); 
       cmd.CommandText = "select * from EMPLOYEES"; 

       cmd.CommandType = CommandType.Text; 
       cmd.Connection = conn; 
       conn.Open(); 

       OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 


       if (dr != null) 
       { 
        while (dr.Read()) 
        { 
         var cust = new Employee 
         { 
          Adres = dr.GetString(7), 
          Country = dr.GetString(11), 
         }; 
         custList.Add(cust); 
        } 
       } 
       return custList; 
      } 

和Silverlight应用程序代码

client.CustomerListCompleted += new EventHandler<CustomerListCompletedEventArgs>(client_CustomerListCompleted); 
      client.CustomerListaAsync(); 
     } 

     void client_CustomerListCompleted(object sender, CustomerListCompletedEventArgs e) 
     { 
      gridControl1.ItemsSource = e.Result[0]; 
     } 

这是工作,但我不得不执行多个SQL查询,我无法实现对每一类one.how我可以做这个任务。

谢谢。

+0

你是什么意思的“必须执行多个SQL查询”?除了客户名单之外,您是否还有其他需要获取的数据集,并且正在寻找一种将其返回客户端的优化方法? – KodeKreachor 2012-03-20 00:34:22

回答

0

您将需要更多地分解您的代码。我假设你的意思是你有多个使用Employee的服务。如果你这样做,那么你会发现你在silverlight方面有多个Employee对象(按服务名称空间区分)。

要解决此问题: 首先为您的业务实体/数据传输对象创建一个服务器端项目。员工应该在那里。

然后创建一个Silverlight项目并将“添加现有类”作为链接类。

现在,当您执行更新服务时,VS2010服务生成的代码将不再包含Employee ...而是利用共享业务对象。所以现在多个服务参考是指同一个员工。

然后在Silverlight中,我还会进一步分解从svc调用中收到的结果。创建一个ObservableCollection然后遍历结果并添加到这个集合中。绑定到Obs集合是让Silverlight保持高兴的方式。 (你还需要一些关于员工的INotifyPropertyChanged的东西......但希望这是一个有用的开始)。