如何根据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));