【问题标题】:ComboBox. Select item组合框。选择物品
【发布时间】:2019-11-05 23:32:46
【问题描述】:

将项目加载到ComboBox

private class ItemWorker
{
    public int Id { get; set; }
    public string FullName { get; set; }
}


bindingWorker.DataSource = model.Workers
    .Select(x => new ItemWorker
    {
        Id = x.Id,
        FullName = x.FullName
    })
    .ToList();
cbWorker.DataSource = bindingWorker;
cbWorker.DisplayMember = "FullName";
cbWorker.ValueMember = "Id";

如何选择项目?如果我分别有IdFullNameId 包含在contract 和另一个实体中的名称中)。我试过这样:

ItemWorker item = new ItemWorker 
{ Id = contract.Worker, FullName = contract.WorkerNavigation.FullName };
cbWorker.SelectedIndex = cbWorker.Items.IndexOf(item);

但是IndexOf 返回了-1。我的item的值和现有的值是一样的

更新

DisplayMember "FullName" 可以复制。但“id”永远不会。

【问题讨论】:

    标签: c# winforms entity-framework combobox indexof


    【解决方案1】:

    ComboBox.SelectedIndex 是关于组合框数据源中的列表,您查找项目结果的方式是不同的对象。您在该代码 sn-p 中拥有的是创建一个 新对象 (ItemWorker),然后您尝试“在数据源中找到它”,但它并不存在完全不同。

    如果您用来“设置项”的列表与您的数据源相同,您可能会发现使用SelectedItem 会更容易,参考:

    https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.combobox.selecteditem?view=netframework-4.8

    我会保留在model.Workers.Select... 步骤中生成的列表的副本,并使用它来“查找对象”。

    【讨论】:

      【解决方案2】:

      说明

      IndexOf() 正在其项目中寻找。创建新项目时:

      ItemWorker item = new ItemWorker 
      { Id = contract.Worker, FullName = contract.WorkerNavigation.FullName };
      

      两个值相同,但内存地址不同。一个属于ComboBox.DataSource,另一个不属于。因此返回-1

      解决方案

      就我而言,我做了下一个:

          public static string GlueTogether(int id, string fullName)
          {
              return String.Format("{0} - id: {1}", fullName, id);
          }
      
          public static string Parse(string fullName)
          {
              return fullName.Substring(0, fullName.IndexOf(" - id:"));
          }
      

      DisplayMember 类似于文本"Name - id: 10"。并找到:

      cbWorker.FindString(cbWorker.SelectedText);
      

      【讨论】:

      • 大声笑,由于某种原因,我没有看到自己的答案,但实际上是相同的根本原因 :-) 很高兴你解决了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多