2015-11-18 141 views
1

我已經寫了一個簡單的Web服務,允許我插入到我的SQL DB(工作正常),並從我的SQL DB(目前不工作)檢索信息。我試圖將信息放入列表中,然後將該信息顯示在通用Windows應用程序的列表框中。此登錄我:從WebService LINQ查詢填充列表框

WEB SERVICE

[OperationContract] 
    List<TBL_My_Info> FindInfo(string uid); 

    public List<TBL_My_Info> FindInfo(string uid) 
    { 
     DataClasses1DataContext context = new DataClasses1DataContext(); 
     var res = from r in context.TBL_My_Info where r.User_Name == uid select r; 
     return res.ToList(); 
    } 

通用web應用

 private void btnView_Click(object sender, RoutedEventArgs e) 
    { 
     string s = txtNameFind.Text; 
     this.Content = new Page1(s); 
    }  

    public Page1(string s) 
    { 
     this.InitializeComponent(); 
     LoadData(s);   
    } 

    private async void LoadData(string s) 
    { 
     var client = new ServiceReference1.Service1Client(); 
     var res = await client.FindMyInfoAsync(s); 
     articleMyInfoListBox.ItemsSource = res; 
    } 

XAML

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ListBox x:Name="articleMyInfoListBox"></ListBox> 
</Grid> 

我知道我需要像myListBox.ItemSource = res;這樣的東西,但res在ItemSource之後沒有顯示爲選項。我使用using myapp.ServiceReference1;引用了我的Web服務。

因此,在短期,我所希望做的是填充列表框的信息返回的列表,瞭解這些信息是從Web服務來....

如果我這樣做的錯誤的方式,並有更好的方式,請讓我知道。我對LINQ沒有任何經驗,但對SQL有一定的經驗。所以,當然,SQL將是可取的..

編輯

我目前得到這回在我的列表框

using InsertAppTest.ServiceReference1.TBL_My_Info; 

回答

0

爲服務客戶端生成的方法是異步的,並返回的情況下, Task,所以你需要await它們才能真正獲得「res」返回值。嘗試是這樣的:

private void btnView_Click(object sender, RoutedEventArgs e) 
{ 
    string s = txtNameFind.Text; 
    this.Content = new Page1(s); 
} 

public Page1(string s) 
{ 
    this.InitializeComponent(); 
    LoadData(s); 
} 

private async void LoadData(string s) 
{ 
    var client = new ServiceReference1.Service1Client(); 
    var res = await client.FindInfoAsync(s); 
    listBox.ItemsSource = res; 
} 

這應該工作,但也有可能是一個更好的方式來組織你的異步調用 - 我只是不知道有足夠的瞭解你要完成的任務。

編輯

你的XAML是要要有的DisplayMemberPath屬性集,以便它知道要顯示在TBL_My_Info什麼財產。現在它可能只是在每個實例上做一個ToString()

如果TBL_My_Info看起來是這樣的:

public class TBL_My_Info 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

那麼你的XAML應該是這樣的:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <ListBox x:Name="articleMyInfoListBox" DisplayMemberPath="Name"></ListBox> 
</Grid> 
+0

好了,我調試的代碼將您的建議在後,以及在將數據通過「res」變量,但不顯示它在列表框中。相反,在列表框中,它顯示我在頁面頂部使用的語句「using myapp.ServiceReference1」,並將該表添加到using語句的末尾......因此,在整個列表框中都返回這個「使用myapp.ServiceReference1.TBL_My_Info」...我將在上面發佈更新後的代碼,以及列表框的xaml。有什麼建議? – Code

+0

我只是將編輯添加到我的問題 – Code

+0

當它呈現時,您的列表框的內容實際上是字符串「using myapp.ServiceReference1.TBL_My_Info」?這沒有意義。您是否將列表框的DisplayMemberPath屬性設置爲TBL_My_Info類中屬性的名稱? – alexchardin