代码之家  ›  专栏  ›  技术社区  ›  Jonathan Escobedo

Linq和ComboBox数据源问题

  •  0
  • Jonathan Escobedo  · 技术社区  · 16 年前

    实现最佳功能的代码有多远? 我有两个组合框,所以第一个与选择公司相关,第二个与选择分支机构相关。

    我注意到唯一能用过滤填充数据源的方法。在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 回复  |  直到 16 年前
        1
  •  2
  •   Pavel Minaev    16 年前

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

    • 使之成为您的 Company 类具有获取所有关联分支的属性-例如 Company.Branches . 如果您使用LINQtoSQL或实体框架,那么应该已经有一个了。
    • 有两个 BindingSource S bsCompanies bsBranches .
    • 集合 cboCompany.DataSource BSB公司 cboBranch.DataSource 分支机构
    • 集合 bsCompanies.DataSource 到包含公司的集合/数据集。
    • 集合 bsBranches.DataSource Branches 在下面 BSB公司 (如果集合是强类型的,则表单设计器应允许您在执行上一步后执行此操作)。

    现在,每当用户在第一个组合中选择不同的公司时,公司绑定源中的当前项都将更改。这将导致第二个绑定源的绑定重新评估,并将新选择的公司的分支列表设置为第二个组合的源。

    推荐文章