来自WebService的LINQ查询填充列表框

本文关键字:填充 列表 查询 LINQ WebService 来自 | 更新日期: 2023-09-27 18:22:20

我已经编写了一个简单的web服务,它允许我插入我的SQL数据库(工作正常)并从我的SQL DB中检索信息(目前不工作)。我正在尝试将信息放入一个列表中,然后在通用windows应用程序的列表框中显示该信息。这是我的登录名:

WEB服务

  [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;一样的东西,但在ItemSource之后,res并不是一个选项。我已经使用using myapp.ServiceReference1;引用了我的Web服务。

简言之,我想做的是用返回的信息列表填充列表框,知道这些信息来自web服务。。。。

如果我做这件事的方式不对,有更好的方法,请告诉我。我对LINQ没有任何经验,但对SQL有一定的经验。当然,SQL更可取。。

编辑

我目前正在我的列表框中返回此

using InsertAppTest.ServiceReference1.TBL_My_Info;

来自WebService的LINQ查询填充列表框

为服务客户端生成的方法是异步的,并返回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>