WCF - 在ComboBox中列出

时间:2016-05-28 23:24:57

标签: c# winforms wcf

我想将国家/地区的名称从列表的一个字段中取出并将它们放到comboBox中:

    public TravelAgencyResponse GetInformation(TravelAgencyRequest request)
    {
        TravelAgencyResponse response = new TravelAgencyResponse();
       // response.Offers = new OfferDto();
       response.Offers = new List<DataTransferObjects.OfferDto>();            
       response.Offers.Add(new DataTransferObjects.OfferDto()
        {
            IdOffer = 0,
            KindOfAccommodation = "Hotel",
            Country = "Spain",
        });

        response.Offers.Add(new DataTransferObjects.OfferDto()
        {
             IdOffer = 1,
             KindOfAccommodation = "Hotel",
             Country = "Italy",
         });

       response.ThisOffer = (from offer in response.Offers
                              where offer.Country == request.Country
                              select offer).FirstOrDefault();
        return response;
    }

我认为我可以在不使用 FirstOrDefault()的情况下使用LINQ,但在这种情况下我不能这样做。

 private void button1_Click(object sender, EventArgs e)
    {
        Uri baseAddr = new Uri("http://localhost:1232/TravelAgencyService/SimpleTravelAgencyService/");
        ChannelFactory<ITravelAgencyService> factory = new ChannelFactory<ITravelAgencyService>(new WSHttpBinding(),
            new EndpointAddress(baseAddr));
        ITravelAgencyService proxy = factory.CreateChannel();
        var response = proxy.GetInformation(
            new TravelAgencyService.Messages.TravelAgencyRequest()
            {
                Country = textBox1.Text
            });

        comboBox1.Items.Add(response.ThisOffer.Country);
        listBox1.Items.Add(response.ThisOffer.Country);

    }

我尝试将这些信息放在ComboBox中:

 comboBox1.Items.Add(response.ThisOffer.Country);

我只给出了第一个国家或类似的国家:

comboBox1.Items.Add(response);

我什么都没得到。

我在WCF的第一步!请理解!

1 个答案:

答案 0 :(得分:1)

因此,如果我正确理解您的问题,您希望将所有response.Offers Country属性中包含的所有国家/地区填入ComboBox,是否正确?

由于您提到自己是WPF新手,我将跳过关于MVVM and DataBinding的部分,并向您展示如何使用您现有的方式完成。

首先你需要&#34;提取&#34;来自Offers的所有国家/地区,最好只有一次,并按字母顺序排序。

List<string> countries = response.Offers
    .Select(o => o.Country) // We only need the "Country" of the offer
    .Distinct()             // Every country only once
    .OrderBy(c => c)        // Sort by name
    .ToList();              // make a List<string> out of it

我建议不要手动添加项目,而是建议您通过设置DataSource属性来一次性分配所有项目。

comboBox1.DataSource= countries;

您需要确保Items为空,手动添加的项目和DataSource不能很好地协同工作。

如果您想预先选择某个国家/地区(例如来自ThisOffer的国家/地区),您可以设置ComboBox的SelectedItem属性:

comboBox1.SelectedItem = response.ThisOffer.Country;