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

时间:2012-03-18 17:43:10

标签: c# wcf

编辑http://pastebin.com/EVjD95RY

服务代码片段

我的Windows窗体WCF客户端有两个组合框 - combobox1和combobox2。

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

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

不知道为什么客户端无法使用companies。我对客户端内的服务进行了以下引用...

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

...应该允许我这样访问comapniesclient.companies

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

companyNameaddresstype

在我的客户端内部我这样做,当我从combobox1中选择一个项目时,假设Technology,组合框2将变为启用状态,并且应填充companies中具有type的所有对象。 {1}}数据成员设置为'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;
            }
        }

1 个答案:

答案 0 :(得分:1)

在您的网络服务上,您可以创建方法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);
}