组合框。 Select 项
ComboBox. Select item
将项目加载到 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";
我怎样才能 select 项目?如果我分别有 Id
和 FullName
(Id
包含在 contract
中,名称包含在另一个实体中)。我试过这样:
ItemWorker item = new ItemWorker
{ Id = contract.Worker, FullName = contract.WorkerNavigation.FullName };
cbWorker.SelectedIndex = cbWorker.Items.IndexOf(item);
但是 IndexOf
返回了 -1
。我的 item
和现有的
的值相同
更新
DisplayMember "FullName" 可以重复。但是"id"从来没有。
说明
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);
ComboBox.SelectedIndex
是关于组合框数据源中的列表,您查找项目结果的方式是不同的对象。您在该代码片段中创建了一个 新对象 (ItemWorker
),然后您尝试 "find it in the data source",但它并不存在有效不同。
如果您"set the item of"使用的列表与您的数据源相同,您可能会发现使用起来更方便SelectedItem
,参考:
我会保留在 model.Workers.Select...
步骤中生成的列表的副本,并将其用于 "find objects in"。
将项目加载到 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";
我怎样才能 select 项目?如果我分别有 Id
和 FullName
(Id
包含在 contract
中,名称包含在另一个实体中)。我试过这样:
ItemWorker item = new ItemWorker
{ Id = contract.Worker, FullName = contract.WorkerNavigation.FullName };
cbWorker.SelectedIndex = cbWorker.Items.IndexOf(item);
但是 IndexOf
返回了 -1
。我的 item
和现有的
更新
DisplayMember "FullName" 可以重复。但是"id"从来没有。
说明
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);
ComboBox.SelectedIndex
是关于组合框数据源中的列表,您查找项目结果的方式是不同的对象。您在该代码片段中创建了一个 新对象 (ItemWorker
),然后您尝试 "find it in the data source",但它并不存在有效不同。
如果您"set the item of"使用的列表与您的数据源相同,您可能会发现使用起来更方便SelectedItem
,参考:
我会保留在 model.Workers.Select...
步骤中生成的列表的副本,并将其用于 "find objects in"。