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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Endlich, nach Viel Google und kleines Brainstorming, ich hab die Lösung, mit Dynamische Linq.
Ich ditched GenericComparer Klasse, und gerade schrieb Sie folgenden code in der Sortier event
Und Ihre Arbeitsweise für mich perfekt.
Vielen Dank an alle die versucht haben mir zu helfen.
select new BusinessRisk
im linq-Anweisung.BusinessRiskList.AsQueryable().OrderBy(e.SortExpression);
tun sollte.ja..du hast Recht.. ich war das schreiben unnötig extra code..
InformationsquelleAutor user1181942