Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据datagrid源对c#中的列表进行动态排序_C#_Sorting_Dynamic - Fatal编程技术网

如何根据datagrid源对c#中的列表进行动态排序

如何根据datagrid源对c#中的列表进行动态排序,c#,sorting,dynamic,C#,Sorting,Dynamic,在这里,我有一个绑定到对象列表的DatagridView——这很好。 我所做的是一次列出10个左右的结果,在这里,可以使用“下一个”和“上一个”按钮导航结果,这些按钮只需从源代码中获取结果并显示它们 问题是,我希望源代码按Datagrid视图中单击的列排序,而不仅仅是当时查看的结果,而是所有结果 我终于开始接近了。我可以比较我的源代码,甚至可以根据用于调用数据值的列的名称设置顺序。 我需要知道的是,我可以让它自动设置数据类型: AppSettings.Instance.SearchResults

在这里,我有一个绑定到对象列表的
DatagridView
——这很好。 我所做的是一次列出10个左右的结果,在这里,可以使用“下一个”和“上一个”按钮导航结果,这些按钮只需从源代码中获取结果并显示它们

问题是,我希望源代码按Datagrid视图中单击的列排序,而不仅仅是当时查看的结果,而是所有结果

我终于开始接近了。我可以比较我的源代码,甚至可以根据用于调用数据值的列的名称设置顺序。 我需要知道的是,我可以让它自动设置数据类型:

AppSettings.Instance.SearchResults.Sort(
    new Comparison<SearchResult>(
        (x, y) =>
        ((Int32) x.GetType().GetProperty("Links").GetValue(x, null)).CompareTo(
            ((Int32) y.GetType().GetProperty("Links").GetValue(y, null)))));
AppSettings.Instance.SearchResults.Sort(
新比较(
(x,y)=>
((Int32)x.GetType().GetProperty(“链接”).GetValue(x,null)).CompareTo(
((Int32)y.GetType().GetProperty(“链接”).GetValue(y,null()));
在这里,我将属性设置为Links,它是一个Int。如果不转换该值,我无法使用
CompareTo
,即使它知道它是一个
Int32
。我比较的一些值将是
DateTime
类型,因此我需要知道是否可以比较并动态获取数据类型,因为我现在非常接近


摘要-我想自动识别动态调用的属性值的数据类型。

我不确定这是否是最好的“前进方向”,以满足您的需要

如果适用,我宁愿使用
I可比较的
,例如

int BetterComparison<T>(T x, T y) where T : IComparable<T>
{
    return x.CompareTo(y);
}
如果出于某种原因,您仍然想求助于反射(或者在本质上有更通用的东西,或者没有任何这样的接口定义)

对于特定类型,您应该
CompareTo
方法上反映
,然后仅使用您拥有的值进行调用。例如,类似这样的内容(在您的方法中):

您可以这样称呼它:

var ret1 = Comparison(10, 20);
var ret2 = Comparison(DateTime.Now, DateTime.Now.AddDays(1));
// x.GetType() and y.GetType() should be interchangable by the nature of it
var compareMethod = x.GetType().GetMethod("CompareTo", new[] { y.GetType() });
return (int)compareMethod.Invoke(x, new object[]{y});
var ret1 = Comparison(10, 20);
var ret2 = Comparison(DateTime.Now, DateTime.Now.AddDays(1));