【问题标题】:Silverlight RIA Services DataSilverlight RIA 服务数据
【发布时间】:2012-08-27 21:19:34
【问题描述】:

几天来,我一直在尝试弄清楚如何从我的 Silverlight 应用程序中访问数据。

我想使用已经写好的数据类和业务类。

根据另一篇文章的一些建议,我创建了一个 Silverlight 业务应用程序。访问数据的代码位于我的 Web 应用程序的域服务类中。这是从 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()

它全部编译并运行,但网格是空的。我通过单步执行知道存储过程确实包含数据。

【问题讨论】:

    标签: silverlight wcf-ria-services data-access


    【解决方案1】:

    有几点我想发表评论。

    首先,最好不要从上述函数返回。这是因为您失去了能够编辑和更新数据的好处。您应该改为返回 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 - 域服务

    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>();
            }
        }
    
    }
    

    【讨论】:

    • 崔,非常感谢您的回答。关于您的第一点,如果我将 Ienumerable 更改为 Iqueryable,代码不会编译到生成的代码中,这意味着我无法在 silverlight 项目中引用它。关于第二点,当我遇到转换错误时,我确实尝试使用 ItemsSource。关于第三点,我无法编译它,示例项目我无法弄清楚如何与我的问题相关联。所以如果崔或者其他人愿意的话,我仍然需要帮助。鲍勃
    • Bob,确保你有一个 RIA 服务链接 msdn.microsoft.com/en-us/library/ee707372(v=vs.91).aspx 你使用的项目模板是什么?
    • 我正在使用 Silverlight 业务应用程序。我检查并自动设置 RIA 服务链接。 - 鲍勃
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多