2013-11-17 2 views
2

Если у меня есть GridView, как показано ниже. Как я могу простейшим способом сортировать по ID в (всегда) порядке DESC? Нужно ли иметь SortExpression? Я действительно новичок в этом, поэтому прошу учиться.Как сортировать GridView по столбцу в порядке убывания?

<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

Обычно вы должны сортировать источник данных, прежде чем назначать источник данных для своего gridview. Какой источник данных вы используете? –

+0

На данный момент просто жестко запрограммированные объекты. – guitarzero

+0

, если ваши жестко закодированные объекты - это список объектов, я рекомендую сначала отсортировать список объектов, а затем назначить список объектов в источник данных gridview. Вы можете отсортировать список с помощью Linq [StackOwerflow Как сортировать список] (http://stackoverflow.com/questions/3309188/c-net-how-to-sort-a-list-t-by-a-property- in-the-object) –

ответ

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; 

... 
+0

Очень простая и решенная моя проблема. Благодаря тонну! – guitarzero

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() метод в списке объектов, вы передаете новый экземпляр этого вспомогательного класса (передавая ему свойство вашего списка, который вы хотите отсортировать, и направление, которое вы хотите отсортировать - по возрастанию или по убыванию).

Поскольку вышеприведенная логика сравнения использует generics, вы можете передать любой тип, который хотите отсортировать, (например, int, DateTime или даже целые объекты домена).

Смежные вопросы