0

ここ数日間、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()

すべてコンパイルして実行しますが、グリッドは空です。ストアド プロシージャにデータが含まれていることを確認しました。

4

1 に答える 1

0

コメントしたい点がいくつかあります。

まず、上記のような関数からは戻らない方が良いです。これは、データを編集および更新できるという利点が失われるためです。代わりに IQueryable を返す必要があります。EF を使用していくつかのコードを生成し、その感触をつかんでください。

次に、DataContext を設定する代わりに、DataGrid の ItemsSource を設定します。

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

3 番目に、Silverlight コードをステップ実行して、gridData に値が含まれていることを確認する必要もあります。最初の観察では、Silverlight は非同期であるため正しくないように見えます。グリッドからデータをフェッチするコードは次のようになります。

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

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

}
于 2012-08-28T00:25:01.360 に答える