gpt4 book ai didi

c# - 对 DataGridView 中的选定行进行排序

转载 作者:太空狗 更新时间:2023-10-29 23:26:04 25 4
gpt4 key购买 nike

我在 Winforms 应用程序中有一个 DataGridView。我想在其中选择一组行并按列(时间戳)对这些行进行排序...

其余行应保持原样。这可以使用 DGV 的排序属性来完成吗

谢谢

最佳答案

Can this be done using the sort property of DGV

Sort method DataGridView 用于更简单的排序。例如升序或降序排序,SortOrder 属性也仅用于“简单”排序。

这个行为可以实现吗?当然。

我认为最简单的方法是:

  • 存储第一个选中项的索引
  • DataGridView
  • 中取出要排序的项目
  • 使用 LINQ 对列表进行排序
  • 追加两个列表,并在第一步存储的索引处添加排序列表。

但是,如果您选择的项目彼此不相邻,则需要考虑如何处理,例如,如果您选择索引 { 1, 3, 6, 9 } ,您可能我仍然想将其附加到索引 1

编辑

好的,所以我稍微尝试了一下,想出了一种可以实现它的方法。它不是很优化,但您会明白我的意思。

首先,这是我使用的 SortSelectedIndices 方法:

static IEnumerable<T> SortSelectedIndices<T>(
IEnumerable<T> values,
IEnumerable<int> selectedIndices,
Func<IEnumerable<T>, IEnumerable<T>> sort)
{
var selectedValues = new List<T>();

for (var i = 0; i < selectedIndices.Count(); i++)
selectedValues.Add(values.ElementAt(selectedIndices.ElementAt(i)));

var sortedList = sort(selectedValues);

var finalList = new List<T>();

var startPositionFound = false;
for(var i = 0; i < values.Count(); i++)
{
if (selectedIndices.Contains(i))
{
if (startPositionFound) continue;

startPositionFound = true;
finalList.AddRange(sortedList);
}
else
finalList.Add(values.ElementAt(i));
}

return finalList;
}

然后我这样调用它:

static void Main(string[] args)
{
var unsorted = new[] {3, 5, 6, 1, 2, 87, 432, 23, 46, 98, 44};
var selected = new[] {1, 4, 7};

Print(unsorted);

var sort = new Func<IEnumerable<int>, IEnumerable<int>>(
(x) => x.OrderBy(y => y).ToList());

var sorted = SortSelectedIndices(unsorted, selected, sort);

Print(sorted);
}

这会打印出以下内容:

{ 3,5,6,1,2,87,432,23,46,98,44 }
{ 3,2,5,23,6,1,87,432,46,98,44 }

我只是在这里使用一种简单的方法将其打印到控制台:

static void Print<T>(IEnumerable<T> values)
{
Console.Write("{ ");
Console.Write(string.Join(",", values));
Console.WriteLine(" }");
}

所以您可以做的是拥有一个“排序”按钮,按下它时您调用 SortSelectedIndices,然后在完成后重新绑定(bind)列表。 记住我没有分析或重构这段代码,它可能没有你喜欢的那么快,我只是想给你一个想法,告诉你你可以做些什么来实现这个解决方案。

关于c# - 对 DataGridView 中的选定行进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com