LINQ和ComboBox DataSource问题

时间:2009-09-03 17:38:25

标签: c# datasource

最佳功能的代码有多远? 我有两个ComboBox,所以第一个用于选择公司,第二个用于选择与该公司相关的分支机构。

我注意到我可以通过过滤填充数据源的唯一方法。在LINQ上就是这样,也许我错了请花一点时间查看以下片段:

private void cboCompany_SelectedIndexChanged(object sender, EventArgs e)
        {
            var _index = ((ComboBox)sender).SelectedIndex;
            using (DB db = new DB())
            {
                var su = (from s in db.Branchs select s);

                if (cboCompany.SelectedIndex == 0)
                {
                    cboBranch.DataSource = su.Where(x => x.codeCompany == 1).Select(x => x.name).ToList();
                }
                else if (cboCompany.SelectedIndex == 1)
                {
                    cboBranch.DataSource = su.Where(x => x.codeCompany == 2).Select(x => x.name).ToList();
                }

                cboBranch.BindingContext = this.BindingContext;
                cboBranch.DisplayMember = "name";
                cboBranch.SelectedIndex = 0;
            }
        }

提前致谢!

1 个答案:

答案 0 :(得分:2)

我不会手工编码,而是让数据绑定为我做所有这些工作。特别是,它可以这样设置:

  • 使您的Company类具有获取所有相关分支的属性 - 例如Company.Branches。如果你使用LINQ to SQL或Entity Framework,那里应该有一个。
  • 有两个BindingSourcebsCompaniesbsBranches
  • cboCompany.DataSource设为bsCompanies,将cboBranch.DataSource设为bsBranches
  • bsCompanies.DataSource设置为包含公司的集合/数据集。
  • bsBranches.DataSource设置为Branches下的bsCompanies(表单设计人员应该在执行上一步后执行此操作,如果您的集合是强类型的话)。

现在,只要用户在第一个组合中选择其他公司,公司绑定源中的当前项目就会发生变化。这将导致第二个绑定源的绑定重新评估,并将新选择的公司的分支列表设置为第二个组合的源。