我编写了一个简单的Web服务,允许我插入我的SQL DB(工作正常)并从我的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();
}
通用网络应用
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服务。
简而言之,我想要做的就是在列表框中填入返回的信息列表,知道这些信息来自网络服务....
如果我这样做的方式不对,有更好的方法,请告诉我。我对LINQ没有任何经验,但对SQL有一定的经验。所以当然,SQL会更好..
修改
我目前正在我的列表框中返回
using InsertAppTest.ServiceReference1.TBL_My_Info;
答案 0 :(得分:0)
为服务客户端生成的方法是异步的,并返回Task
的实例,因此您需要await
它们才能正确获取&#34; res&#34 ;回报价值。尝试这样的事情:
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>