【问题标题】:winforms datagridview sorting using LINQwinforms datagridview 使用 LINQ 排序
【发布时间】:2010-12-06 08:53:45
【问题描述】:

我正在使用 Linq...更具体地说,PLINQO。无论如何,以下是我绑定到 datagridview (winforms) 的查询示例:

    public static List<Task> GetUserTasks( Guid userID ) {
        using (myDataContext ctx = new myDataContext()) {
            try {
                return ctx.Manager.Task.GetByUserID( userID ).ToList();
            } catch (Exception) {
                throw;
            }
        }
    }

在我的 UI 中,我有以下要绑定的设置:

        BindingSource bs = new BindingSource();
        bs.DataSource = DUtasks.GetUserTasks( User.Current.UserID );
        dgvTasks.DataSource = bs;

它有效,但无法排序。我尝试了“AsEnumerable()”而不是“ToList()”,但由于某种原因,引发了“反对引用”错误。关于我如何在这方面进行的任何想法?

非常感谢!

【问题讨论】:

    标签: winforms linq sorting datagridview


    【解决方案1】:

    您是否尝试过返回 IOrderedEnumerable?不确定它是否会有所帮助,但它旨在处理有序的 LINQ 结果。

    【讨论】:

    • 你好强盗。不,不幸的是,这不起作用。我已经尝试将“orderby”附加到查询中,但没有结果。我将每列中的排序属性设置为自动(哦,顺便说一句,我选择不自动生成列,如果这会产生差异。),所以我知道只要我把它弄对了,SortGlyph 就应该出现,对吗?
    【解决方案2】:

    好的,问题解决了!!! :)

    找到以下链接:SortableBindingList...(我的评论在底部,带有转换后的 C# 工作代码)。

    现在我所有返回 List 的查询方法都可以像这样使用:

            SortableBindingList<Task> sortedTasks = new SortableBindingList<Task>( DUtasks.GetUserTasks( User.Current.UserID ) );
            dgvTasks.DataSource = sortedTasks;
            dgvTasks.Sort( colTaskDue, ListSortDirection.Ascending );
    

    希望这对某人有所帮助!

    【讨论】:

      【解决方案3】:

      在此页面中仅使用 MySortableBindingList 类 Implementing-a-Sortable-BindingList-

      然后

      var yourLinqList = ...;

      MySortableBindingList sortList = new MySortableBindingList(yourLinqList);

      dataGridView1.DataSource = sortList;

      那么当单元格标题单击时,您的 dataGridView 必须进行排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        相关资源
        最近更新 更多