【问题标题】:LINQ and ComboBox DataSource issueLINQ 和 ComboBox 数据源问题
【发布时间】:2009-09-03 17:38:24
【问题描述】:

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

我注意到我可以用过滤填充数据源的唯一方法。LINQ 上的位置是这种方式,也许我错了,请花点时间查看以下 sn-p:

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;
            }
        }

提前致谢!

【问题讨论】:

    标签: c# datasource


    【解决方案1】:

    与其手动编码,不如让数据绑定为我完成所有这些工作。特别是,它可以这样设置:

    • 使您的Company 类具有获取所有关联分支的属性 - 例如Company.Branches。如果您使用 LINQ to SQL 或 Entity Framework,应该已经有了。
    • 有两个BindingSources、bsCompaniesbsBranches
    • cboCompany.DataSource 设置为bsCompanies,并将cboBranch.DataSource 设置为bsBranches
    • bsCompanies.DataSource 设置为包含公司的集合/DataSet。
    • bsCompanies 下将bsBranches.DataSource 设置为Branches(如果您的集合是强类型的,则表单设计器应该让您在执行上一步后执行此操作)。

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

    【讨论】:

    • 是的,顺便说一句..如果分支是可选的选择会发生什么,我的意思是您需要在分支组合附近检查以启用此控件并选择是否需要,在此操作中,绑定源是否失败?
    • 为什么会失败?当然,它仍然会将分支机构绑定到公司,只是用户无法与分支机构组合框进行交互。
    • 我明白了,感谢您提供的信息,您能否提供更多有关高级 BindingSource 的链接,例如使用泛型或复杂类型
    • 我不确定你的意思。 BindingSource 并不真正关心该类型是否为泛型(它显然不能与开放的泛型类型一起使用 - 即 List<> - 但会很高兴地处理 List<Foo<Bar>>) - 只要它可以使用反射来获取关于所述类型的属性。而且我不确定您所说的“复杂类型”是什么意思。无论如何,最好的参考可能仍然是 MSDN:msdn.microsoft.com/en-us/library/ef2xyb33.aspx
    猜你喜欢
    • 2011-05-11
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多