如何使用服务中的项目填充客户端组合框';的对象列表

本文关键字:列表 对象 组合 客户端 服务 何使用 项目 填充 | 更新日期: 2023-09-27 18:28:22

编辑:http://pastebin.com/EVjD95RY

服务代码片段

我的WindowsFormsWCF客户端有两个组合框-combobox1和combobox2。

我的基于Web的WCF服务有一个包含信息的对象的List

public List<CompanyInfo> companies = new List<CompanyInfo>();

不知道为什么companies在客户端中对我不可用。我对客户端内部的服务做了以下参考。。。

Client.ServiceReference1.ServiceClient client = new ServiceReference1.ServiceClient();

它本应该允许我访问comapnies,就像这样:client.companies

CompanyInfo的一个典型对象具有以下数据成员:

companyNameaddresstype

在我的客户端中,我做到了这一点,所以当我从combobox1中选择一个项目时,比如说Technology,combobox2将被启用,并且应该用companies中的所有对象来填充自己,这些对象的type数据成员设置为"technology"。

问题是我想不通。我正在尝试像这样使用foreach

    private void combobox1_SelectedValueChanged(object sender, EventArgs e)
            {
                if (combobox1.Text != "")
                {
                    combobox2.Enabled = true;
// For every object inside the companies list that have their type set to technology put them into the combobox, disregards the other types
                    if (combobox1.SelectedText.Equals("Technology"))
                    {
                        foreach(ServiceReference1.CompanyInfo ci in ?)
                        {
                            if(ci.Type.Equals("technology"))
                                combobox2.Items.Add(?);
                        }
                    } // more options i.e. combobox1.SelectedText.Equals("Medicine")
                }
                else
                    combobox2.Enabled = false;
            }
        }

如何使用服务中的项目填充客户端组合框';的对象列表

在您的Web服务上,您可以创建一个方法GetCompaniesOfType并传入所选值。最好是某种ID,而不是字符串值。根据该方法的结果,您可以填充第二个组合框。如果公司列表没有太大变化,您可以添加客户端和/或服务器端缓存,以更快地加载数据。

代码会变成类似的东西

Private void combobox1_SelectedValueChanged(object sender, EventArgs e)
{
    combobox2.Items.Clear();
    if (combobox1.SelectedValue == null)
        return;
    var companies = ServiceReference1.GetCompaniesOfType(combobox1.SelectedValue);
    combobox2.Items.Add(companies);
}