2012-08-27 235 views
0

我一直在試圖弄清楚如何從我的Silverlight應用程序訪問數據幾天,現在。Silverlight RIA服務數據

我想使用已經寫好的數據類和業務類。

根據另一篇文章的一些建議,我創建了一個Silverlight商業應用程序。訪問數據的代碼位於我的Web應用程序的域服務類中。這是從Silverlight應用程序調用的。

我覺得我很接近,但我沒有很好的語法。

這裏是我的域服務類

Public Function GetGridData() As IEnumerable(Of Submissions) 

Dim dtResults As DataTable 

Dim _ConnectionString As String 
= _ 

"Password=xxxx;Persist Security Info=True;User ID=xxxx;Initial Catalog=APCD;Data Source=xxxx" 

mdsResults = s.GetSubmissions(3, 0, _ConnectionString,"2011", "0", False) 

dtResults = mdsResults.Tables(0) 

Dim MySubmissions = New List(Of Submissions 
)() 

For Each row As DataRow In 
dtResults.Rows 

Dim MySubmission = New Submissions() With 
{ _ 
.SubmissionControlId = Convert.ToString(row("SubmissionControlId" 
)), _ 
.OrgId = Convert.ToString(row("Org Id" 
)), _ 
.DateProcessed = Convert.ToString(row("DateProcessed")) _ 

} 


MySubmissions.Add(MySubmission) 

Next 

Return MySubmissions 

End Function 

The code in the silverlght page is 



Dim x As New Web.CustomerDomainContext 

    grdSubmissions.DataContext = x.GetGridData() 

代碼這一切編譯和運行,但網格是空的。我從逐步瞭解到,存儲過程確實包含數據。

回答

0

有幾點我想評論。

首先,最好不要從上面的函數返回。這是因爲你失去了編輯和更新數據的好處。您應該返回IQueryable。使用EF生成一些代碼來感受它。

其次,不是設置DataContext,而是設置DataGrid上的ItemsSource。

Dim gridData = x.GetGridData() 
grdSubmissions.ItemsSource= gridData 

第三,你還應該逐步通過Silverlight代碼,並確保gridData包含值。從第一次觀察,它看起來不正確,因爲Silverlight是異步的。該代碼來從網格數據應該是這樣的:

Dim domainContext = new MyDomainContext() 
AddHandler domainContext.Completed, 
    Sub (op) 
    grdSubmissions.ItemsSource = domainContext.Submissions 
    End Sub 
domainContext.Load(domainContext.GetSubmissionQuery()) 

您最好通過這個例子的工作:http://blogs.msdn.com/b/kylemc/archive/2011/04/29/mvvm-pattern-for-ria-services.aspx作爲原始RIA服務代碼是最低限度,並且需要更多的便利方法。

更新1 - 的DomainService

namespace SampleDataClass.Web.Services 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel; 
    using System.ComponentModel.DataAnnotations; 
    using System.Linq; 
    using System.ServiceModel.DomainServices.Hosting; 
    using System.ServiceModel.DomainServices.Server; 

    public class Customer 
    { 
     [Key] 
     public int CustomerId { get; set; } 

     public string Name { get; set; } 

     public string Address { get; set; } 
    } 

    // TODO: Create methods containing your application logic. 
    [EnableClientAccess()] 
    public class DomainService1 : DomainService 
    { 

     [Query] 
     public IQueryable<Customer> GetCustomers() 
     { 
      return (new Customer[] 
      { 
       new Customer() { CustomerId=1, Name="Luigina Davide", Address="Via Giulio Petroni, 82 24050-Palosco BG" }, 
      }).AsQueryable<Customer>(); 
     } 
    } 

} 
+0

翠,非常感謝回答。關於您的第一點,如果我將Ienumerable更改爲Iqueryable,則代碼不會編譯到生成的代碼中,這意味着我無法在Silverlight項目中引用它。關於第二點,當我遇到轉換錯誤時,我嘗試使用ItemsSource。關於第三點,我無法得到它編譯和示例項目,我無法弄清楚如何與我的問題。所以如果崔或其他人願意,我仍然需要幫助。鮑勃 –

+0

鮑勃,確保你有一個RIA服務鏈接http://msdn.microsoft.com/en-us/library/ee707372(v=vs.91).aspx你用什麼項目模板? –

+0

我正在使用Silverlight業務應用程序。我檢查並自動設置RIA服務鏈接。 - 鮑勃 –