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
Winforms 如何在页面列表上启用排序<;T>;_Winforms_Sorting_Lambda_Pagedlist - Fatal编程技术网

Winforms 如何在页面列表上启用排序<;T>;

Winforms 如何在页面列表上启用排序<;T>;,winforms,sorting,lambda,pagedlist,Winforms,Sorting,Lambda,Pagedlist,我希望有人用过非常好的?我实际上在Winforms应用程序中使用它,虽然它确实有效,但我已经失去了对它进行排序的能力 返回页面列表、控制页面和大小以及绑定到DataGridView都不是问题,但我最关心的是排序。现在我也遇到了,但我真的对其中一个参数要求感到困惑。我正在使用私有方法返回SortedPageList,但我下面的代码似乎不起作用: private SortedPagedList<Location, Location> GetInactiveLocationData(int

我希望有人用过非常好的?我实际上在Winforms应用程序中使用它,虽然它确实有效,但我已经失去了对它进行排序的能力

返回页面列表、控制页面和大小以及绑定到DataGridView都不是问题,但我最关心的是排序。现在我也遇到了,但我真的对其中一个参数要求感到困惑。我正在使用私有方法返回SortedPageList,但我下面的代码似乎不起作用:

private SortedPagedList<Location, Location> GetInactiveLocationData(int Index, int Size) {
    sysDataContext ctx = new sysDataContext();
    try {
        var query = ctx.Location.Where(x => x.Active == false).AsQueryable();
        return query.ToPagedList(Index, Size, i => i, false);          
        //return new SortedPagedList<Location, Location>(query, Index, Size, i => i , true);
    }
    catch (Exception) {
        throw;
    }
}
private SortedPagedList GetInactivationData(int索引,int大小){
sysDataContext ctx=新的sysDataContext();
试一试{
var query=ctx.Location.Where(x=>x.Active==false).AsQueryable();
return query.ToPagedList(索引,大小,i=>i,false);
//返回新的SortedPagedList(查询、索引、大小,i=>i,true);
}
捕获(例外){
投
}
}
这会引发一个错误“
无法按类型排序:位置
”。很明显,我想处理这样一种情况,即用户点击一个列标题对该列进行排序

我知道解决方案涉及的Lambda表达式超出了我的知识水平(承认这很尴尬),在这方面我完全不知道!我非常重视你对上述问题的建议


谢谢你

好的,你可以从学习一些开始(向下滚动到“订购”部分。或者在这里:


一旦你发现了魔法,你就可以飞了:p

好吧,我觉得自己像个白痴!……好吧,有点!我有以下几点要做:

using (sysContext ctx = new sysDataContext()) {
    try {
        var data = ctx.Location.Where(x => x.Active == false).AsQueryable();
        var query = data.ToPagedList(PageIndex, PageSize, o => o.DueDate, true);
        dgv.DataSource = query;
    }
    catch (Exception) {
        throw;
    }
}
现在,排序表达式在这里被描述为
o=>o.DueDate
。这很好,虽然这确实有效,但我现在正试图找到一种方法来创建一个通用函数,该函数允许我:

  • 检测单击了哪个列标题(可能使用switch语句)
  • 将其类型转换为适当的Linq实体属性
  • 将该属性传递到泛型方法中
  • 一种类似于以下内容的方法:

    private void RefreshData([type] SortExpression, bool Ascending, int PageIndex, int PageSize) {
        using (sysDataContext ctx = new sysDataContext()) {
            try {
                var data = ctx.Location.AsQueryable();
                var query = data.ToPagedList(PageIndex, PageSize, o => o.[SortExpression], Ascending);
                dgv.DataSource = query;
            }
            catch (Exception) {
                throw;
            }
        }
    }
    
    这可能吗

    另外,SortedPageList方法看起来是这样的(如果它能帮助您帮助我的话):

    public static SortedPagedList<T, TResult> ToPagedList<T, TResult>(this IQueryable<T> source, int index, int pageSize, System.Linq.Expressions.Expression<Func<T, TResult>> keySelector, bool asc) {
        return new SortedPagedList<T, TResult>(source, index, pageSize, keySelector, asc);
    }
    
    publicstaticsortedpagedlisttopagedlist(此IQueryable源、int索引、int页面大小、System.Linq.Expressions.Expression键选择器、bool asc){
    返回新的SortedPagedList(源、索引、页面大小、键选择器、asc);
    }
    

    如何将
    System.Linq.Expressions.Expression
    表示为可以作为参数传递的类型?

    嘿,好的,谢谢,但这些都是我熟悉的东西。我意识到我的问题问得不是很透彻,所以我做了很多编辑。请再看一次!谢谢!