首页 > 解决方案 > 仅选择组合框字符串的一部分或每个索引可能存储两个值?

问题描述

这是我到目前为止所拥有的:

我有一个 ComboBox,我通过从 C# Spotify API 中提取一些播放列表来填充它。我从播放列表对象中playlist.Id获取值。playlist.Name

每个播放列表都将其 Id 和 Name 填充到我的 ComboBox 下拉列表中的一行中,以便用户可以看到他们个人播放列表的列表。

接下来,用户在 ComboBox 中选择他们选择的播放列表,并可以拉出所有曲目(艺术家等)的 ListView。

此步骤需要选择用户的 ComboBox 选择,但我只能使用该playlist.Id值。但是,我需要在框中包含 playlist.Name,以便用户知道要选择的播放列表。

显然,这是从选定的 ComboBox 选项中提取名称和 ID,我不能将这两个值用于轨道列表拉取。我只想要 Id 字符串。

有没有办法只选择 ComboBox 字符串的一部分(只是 ID)或分别为我的 ComboBox 中的一行分配一个值和一个文本?

欣赏我可能这样做很愚蠢。

我也试过:

仅使用播放列表 ID 创建一个单独的数组,并尝试使用 ComboBox 的选定索引与数组索引匹配(仅包含 id 而不是名称)。

userPlaylists.Items.ForEach(playlist =>
{
    playlistArray[i] = playlist.Id;
    comboPlaylists.Items.Add(playlist.Name + playlist.Id);
    i++;
});

标签: c#

解决方案


有一些方法可以提取 ComboBox 文本的一部分,但这不是正确的方法。相反,您应该使用数据绑定。设置 ComboBox 的DataSourceDisplayMemberValueMember属性,以便您以后可以访问SelectedValueID。

这是一个例子:

comboPlaylists.DisplayMember = "Name";
comboPlaylists.ValueMember = "Id";

// I'm assuming that `userPlaylists.Items` is a generic list. 
// Otherwise, you might want to use `userPlaylists.Items.ToList()` instead.
comboPlaylists.DataSource = userPlaylists.Items;

现在,当您想要获取所选 PlayList 的 Id 时,可以使用如下内容:

var id = (int)comboPlaylists.SelectedValue;  // Assuming the ID is an integer.

推荐阅读