我正在尝试创建一个页面,您可以在其中概览项目的赞助商,使用以下服务从数据库中提取数据:
[OperationContract]
public IEnumerable<Sponsor> getSponsors()
{
var query = (from p in dc.Sponsors select p);
IEnumerable<Sponsor> i = query;
return i;
}
当我把断点放在i上时,我可以看到数据正确存在。
在我的Sponsorspage
中,我执行以下操作
public partial class Sponsorspage : UserControl
{
IEnumerable<Sponsor> sponsors = null;
public Sponsorspage()
{
SponsorsServiceClient client = new SponsorsServiceClient();
client.getSponsorsCompleted +=new EventHandler<getSponsorsCompletedEventArgs>(client_getSponsorsCompleted);
client.getSponsorsAsync();
InitializeComponent();
}
void client_getSponsorsCompleted(object sender, getSponsorsCompletedEventArgs e)
{
if (e.Error != null)
MessageBox.Show(e.Error.ToString());
else
{
sponsors = e.Result;
foreach (Sponsor s in sponsors)
{
SponsorView control = new SponsorView(s.tekst);
SLWrapPanel.Children.Add(control);
}
}
}
对于数据库中的每个赞助商,我创建了Sponsorview
,我将其提供给源和文本。您可以在此处查看我的Sponsorview
代码。
public partial class SponsorView : UserControl
{
public SponsorView(string tekst)
{
txtSponsor.Text = tekst;
//Uri uri = new Uri(imageSource, UriKind.Relative);
//ImageSource imgSource = new BitmapImage(uri);
//imgSponsor.Source = imgSource;
InitializeComponent();
}
}
但是当我运行页面时,我收到以下错误:
Object reference not set to an instance of an object.
at OndernemersAward.Views.SponsorView..ctor(String tekst)
at OndernemersAward.Views.Sponsorspage.client_getSponsorsCompleted(Object sender, getSponsorsCompletedEventArgs e)
at OndernemersAward.SponsorsServiceReference.SponsorsServiceClient.OngetSponsorsCompleted(Object state)
我要做的是将string tekst
中的信息(此处sponsor s
)提供给我的用户控件,然后用它来填充文本块。我做错了吗?
谢谢! :)
答案 0 :(得分:1)
好吧,你试图迭代你应该在sponsors
变量中保存的结果。但请注意,您正在调用getSponsors
方法的asynchronus版本(我记得Silverlight中唯一可用的版本)。这意味着,在调用service方法后你不会立即得到结果,而是需要等到调用完成执行的事件后才会被调用。
我不知道为什么这样的事情会给调试带来一些问题,但是代码中的错误肯定会导致显示页面出现问题。
Here是关于如何从服务中检索结果的非常简单的示例。希望这会帮助你注意你的方法中的错误。