如何按列降序排列GridView?

时间:2013-11-17 15:29:22

标签: c# asp.net gridview

如果我有如下的GridView。我怎样才能以最简单的方式在(始终)DESC顺序中按ID排序?我需要SortExpression吗?我真的很陌生,所以要学习。

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" AllowSorting="true" OnSorting="gridView_Sorting">
            <Columns>
                <asp:HyperLinkField DataTextField="ID" DataNavigateUrlFields="ID"
                    DataNavigateUrlFormatString="CrimeCoordinator.aspx?ID={0}" Text="Lead ID"
                    HeaderText="Ärendenummer" />
                <asp:BoundField DataField="Employee" HeaderText="Handläggare" />
            </Columns>
</asp:GridView>

2 个答案:

答案 0 :(得分:1)

使用对象列表,您可以按对象的属性对列表进行排序。 在将列表作为数据源分配给gridview之前,您应该在代码隐藏中对列表进行排序。

以下是如何按ID降序列出员工列表的示例。排序由linq执行,所以请记住在代码隐藏中添加linq作为引用。

using System.Linq;

...

/* your list of hardcoded employees */
list<object> listEmployees = your_list;

/* Sort the list by using linq and save it as sortedEmployees
   The Sorting is done based on the property ID */
list<object> sortedEmployees = listEmployees.OrderByDescending(t => t.ID);

/* set the datasource of your gridview */
GridView1.DataSource = sortedEmployees;

...

答案 1 :(得分:0)

由于您使用对象列表作为数据源,因此您需要实现自己的排序逻辑,如下所示:

public sealed class GenericComparer<T> : IComparer<T>
{
    public enum SortOrder
    {
        Ascending = 0,
        Descending = 1
    }

    private string sortColumn;
    private SortOrder sortingOrder;

    public string SortColumn
    {
        get
        {
            return this.sortColumn;
        }
    }

    public SortOrder SortingOrder
    {
        get
        {
            return this.sortingOrder;
        }
    }

    public GenericComparer(string theSortColumn, SortOrder theSortingOrder)
    {
        this.sortColumn = theSortColumn;
        this.sortingOrder = theSortingOrder;
    }

    public int Compare(T x, T y)
    {
        PropertyInfo thePropertyInfo = typeof(T).GetProperty(this.sortColumn);
        IComparable object1 = (IComparable)thePropertyInfo.GetValue(x, null);
        IComparable object2 = (IComparable)thePropertyInfo.GetValue(y, null);
        if (this.sortingOrder == SortOrder.Ascending)
        {
            return object1.CompareTo(object2);
        }
        else
        {
            return object2.CompareTo(object1);
        }
    }
}

现在,在对象列表中调用.Sort()方法时,传递此辅助类的新实例(将要排序的列表属性和要排序的方向传递给它 - 上升或下降)。

由于上面的比较器逻辑使用泛型,您可以传递您想要排序的任何类型(即intDateTime,甚至整个域对象。)