如果我有如下的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>
答案 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()
方法时,传递此辅助类的新实例(将要排序的列表属性和要排序的方向传递给它 - 上升或下降)。
由于上面的比较器逻辑使用泛型,您可以传递您想要排序的任何类型(即int
,DateTime
,甚至整个域对象。)