【发布时间】:2016-04-28 22:54:31
【问题描述】:
我有一个带有datagridview 的 Windows 窗体。
理想情况:
用户点击九列中的任何一列,程序对所有数据进行排序,如果点击的列包含数字,我想要顶部的最小数字。如果单击的列包含一个字符串,我希望它按字母顺序(A-Z)排序。
我现在拥有的:
我在 Stack Overflow 上看到一个老问题,其中 OP 如何在单击“a”标题时对 datagridview 进行排序。与我的不同之处在于我希望我的 datagridview 可以按九列中的任何一列排序。
我有这个代码,从我发现的问题中偷来的:
dataGridView2.DataSource = listPlayers.Select(s => new { voornaam = s.Voornaam,
Achternaam = s.Achternaam,
positie = s.Positie,
Nationaltieit = s.Nationaliteit,
Leeftijd = s.Age,
Aanval = s.Aanval,
Verdediging = s.Verdediging,
Gemiddeld = s.Gemiddeld,
waarde = s.TransferWaarde })
.OrderBy(s => s.Achternaam)
.ToList();
foreach(DataGridViewColumn column in dataGridView2.Columns)
{
dataGridView2.Columns[column.Name].SortMode =
DataGridViewColumnSortMode.Automatic;
}
这仅允许用户在单击九列之一时按“Achternaam”进行排序。我想要的是当用户点击 Nationaliteit 列时,数据会在顶部以 An 进行排序。以此类推每一列
这是列表播放器列表:
namespace SimulatorSimulator
{
class SpelerData
{
public string Voornaam { get; set; }
public string Achternaam { get; set; }
public string Positie { get; set; }
public string Nationaliteit { get; set; }
public int Age { get; set; }
public int Aanval { get; set; }
public int Verdediging { get; set; }
public int Gemiddeld { get; set; }
public string TransferWaarde { get; set; }
}
}
在主类中:
List<SpelerData> listPlayers = new List<SpelerData>();
一些虚拟数据:
Romelu;Lukaku;Aanvaller;Belgie;22;87;12;50;41.000.000,00
Raheem ;Sterling;Aanvaller;Engeland;21;84;30;57;35.000.000,00
Zlatan ;Ibrahimovic;Aanvaller;Zweden;34;87;21;54;34.500.000,00
【问题讨论】:
-
@KevinTinnemans 请更仔细地考虑 Ivan Stoev 对 Ian 回答的评论。我可能会因为这样说而被激怒,这可能会被误解,因为我发布了自己的答案,但接受的答案无论如何都不会帮助您成为更好的开发人员。蛮力是一个起点,当您无法提出更好的解决方案时,您会退回到该解决方案 - 对于这个特定问题有几个解决方案。这将导致不良做法和难以管理的代码。
标签: c# datagridview