【问题标题】:Is there a way to load data from an IQueryable into a Combobox without looping?有没有办法将数据从 IQueryable 加载到 Combobox 中而不循环?
【发布时间】:2011-11-14 18:10:07
【问题描述】:

基本上,我有一个 IQueryable 数据,我希望将一个字符串(用于显示)和一个 int(用于选择的数据)绑定到一个组合框中,以便用户可以选择适当的选项。通常我只会创建组合框,然后循环通过 IQueryable 将项目添加到组合框。但我突然想到,可能有一种方法可以在不循环的情况下做到这一点。

【问题讨论】:

    标签: c# combobox iqueryable


    【解决方案1】:

    ComboBox DataSource 设置为对象。

    【讨论】:

    • 强烈建议在绑定到控件时添加 .ToList()。 IQueryable 在运行查询时必须在 DataContext 或 ObjectContext 的范围内。如果您只是将 IQueryable 分配给控件的数据源,您不知道这将是真的。
    • @drdwilcox 好的,如何通知 ComboBox 使用 DataSource 中的哪个字符串和 int?简而言之,它如何知道哪些?
    • ComboBox 有 2 个属性,DataTextFieldDataValueField。设置好DataSource后别忘了拨打DataBind()
    • @drdwilcox 这一定是它没有加载的原因,但是没有找到 System.Windows.Forms.ComboBox 的 DataBind() 方法!
    • @drdwilcox 也是。它是 DisplayMember 和 ValueMember,而不是 DataTextField 和 DataValueField...我想知道我们在这里谈论的是同一个控件吗?
    【解决方案2】:

    你的意思是Windows Forms ComboBox?你可以使用AddRange:

    combobox.BeginUpdate();
    combobox.DisplayMember = "Name";
    combobox.Items.AddRange(myQueryable.Select(q => new { q.Id, q.Name }));
    combobox.EndUpdate();
    

    创建存储 ID 和名称的匿名对象。不过,只使用原始对象并删除 .Select 可能会更容易。

    【讨论】:

    • 我要试试这个,因为另一件事不起作用,你知道如果我有一个 List 我会怎么做吗?
    • 这也很奇怪,当我让你的代码工作时,尽管将 DisplayMember 设置为我想要的字符串,但组合框只填充了对象的名称。
    【解决方案3】:

    您指的是哪种技术(WPF、HTML、WinForms)? WPF 的变体是:

    我假设这个组合绑定到这样的模型:

     class SomeViewModel {
    
          public IQuriable<SomeEntity> ItemsQueriable { get; private set; }
    
     }
    

    但是,实际上我认为最好将你的项目控件绑定到 IList 而不是 IQueriable,你可以使用 .ToList() 扩展方法来转换

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多