[英]Silverlight RIA Services Data
幾天來,我一直在試圖找出如何從Silverlight應用程序訪問數據的方法。
我想使用已經編寫的數據類和業務類。
根據另一篇文章的一些建議,我創建了一個Silverlight Business應用程序。 訪問數據的代碼在Web應用程序的Domain Service類中。 這是從Silveright應用程序調用的。
我想我接近了,但語法不正確。
這是我的域服務類中的代碼
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()
全部編譯並運行,但網格為空。 我從逐步了解存儲過程中確實知道數據。
我有幾點要評論。
首先,最好不要從上面的函數中返回。 這是因為您失去了能夠編輯和更新數據的好處。 您應該返回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 Services代碼是裸露的最少,並且需要更多便捷的方法。
更新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>();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.