Die Sortierung der grid-Ansicht-Spalte mithilfe von linq

Ich bin verbindlich, Daten in gridview-Steuerelement im Feld Vorlage, wie :

  <asp:TemplateField HeaderText="Business Objective" SortExpression="BusinessObjective.BusinessObjectiveText">
     <ItemTemplate>
        <asp:Label ID="lblBusinessObjectiveText" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "BusinessObjective.BusinessObjectiveText") %>'></asp:Label>
     </ItemTemplate>
  </asp:TemplateField>

In der code-behind-ich nur binden Liste zur grid-Ansicht:

    gvBussinessRisks.DataSource = this.BusinessRiskList;
    gvBussinessRisks.DataBind();

Liste ist vom Typ "BusinessRisk". Entity-Struktur ist wie

public class BusinessRisk
{
    public BusinessRisk()
    {
        BusinessObjective BusinessObjective = new BusinessObjective();
    }

    public int? BusinessRiskId { get; set; }
    public int ObjectiveId { get; set; }
    public string BusinessRiskText { get; set; }
    public string Description { get; set; }
    public bool IsActive { get; set; }
    public long ActionedBy { get; set; }
    public long? DelegatedTo { get; set; }
    public int? LastLogId { get; set; }
    public int AppOwnerId { get; set; }

    public BusinessObjective BusinessObjective { get; set; }
}

Meine BusinessObjective Klasse hat die Eigenschaft mit dem Namen "BusinessObjectiveText" Was bin ich verbindlich zu einer der Säulen in der grid-Ansicht.

Aber wenn ich versuche mich zu Sortieren dieser Spalte bekomme ich Fehler.

Meine Sortierung Ereignis ist wie:

List<BusinessRisk> sortedList = this.BusinessRiskList;

    sortedList.Sort(new GenericComparer<BusinessRisk>(e.SortExpression, (SortDirection)Enum.Parse(typeof(SortDirection), GetSortDirection(e.SortExpression))));
    gvBussinessRisks.DataSource = sortedList;
    gvBussinessRisks.DataBind();

Und "GenericComparer" Klasse:

public class GenericComparer<T> : IComparer<T>
{
    private string sortExpression;
    private SortDirection sortDirection;
    public GenericComparer(string sortExpression, SortDirection sortDirection)
    {
        this.sortExpression = sortExpression;
        this.sortDirection = sortDirection;
    }

    public int Compare(T x, T y)
    {
        PropertyInfo propertyInfo = typeof(T).GetProperty(sortExpression);
        IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
        IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);


        if (SortDirection == SortDirection.Ascending)
        {
            if (obj1 != null)
                return obj1.CompareTo(obj2);
            return 0;
        }
        else
        {
            if (obj1 != null)
                return obj2.CompareTo(obj1);
            return 0;
        }
    }

    public SortDirection SortDirection
    {
        get { return this.sortDirection; }
        set { this.sortDirection = value; }
    }


}

Bekomme ich Fehler, wenn ich versuche zu Sortieren dieser Spalte als in GenericComparer Klasse (Methode: Vergleichen), habe ich propertyInfo als null. Wenn ich die Sortierung mit Eigenschaften von BusinessRisk Sortieren dann passiert, richtig, aber hier bin ich versucht zu Sortieren, mit einem der Immobilie von BussinessObjective Klasse.

Ich habe versucht, Google, aber nicht immer keine Lösung.

InformationsquelleAutor user1181942 | 2013-04-29

Schreibe einen Kommentar