【发布时间】:2013-04-09 13:51:28
【问题描述】:
我有一个由以下人员创建的列表:
List<Song> SongList = new List<Song>();
由一群人组成:
SongList.Add(new Song(songID, "Dirt", "Alice in Chains", "Rooster", "Rock", "02:32"));
歌曲的详细信息通过以下方式填充到 ListBox 中:
private void songTitle_TextChanged(object sender, EventArgs e)
{
i = 0;
for (; i < songTitle.Text.Length; i++)
{
songResultBox.Items.Clear();
var songResult = from song in SongList
where song.SongTitle != null && song.SongTitle.Length >= songTitle.Text.Length
&& songTitle.Text == song.SongTitle.Substring(0, i+1)
select new { sId = song.SongID, album = song.SongAlbum, artist = song.SongArtist, title = song.SongTitle,
genre = song.SongGenre, length = song.SongLength };
foreach (var item in songResult)
{
songResultBox.Items.Add(new Song(item.sId, item.album, item.artist, item.title, item.genre, item.length));
songResultBox.DisplayMember = "FullName";
songResultBox.ValueMember = "songID";
}
}
}
问题是:我如何创建一个按钮(实际上是 4 个)来获取 ListBox 'songResultBox' 的内容并按标题、专辑、艺术家、流派等对其内容进行排序。
【问题讨论】:
-
我觉得你其实应该对listbox的数据源进行排序,重新绑定listbox。这样你只处理你的原始数据结构,而不是 ListBox 控件本身
-
列表框的数据源会在运行时动态添加。我所拥有的 SongList.Add 仅用于测试目的。
-
最简单的方法是实现
Compare函数并使用List.Sort()