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