Sorting grid view column using linq
我正在将数据绑定到模板字段中的GridView,如:
1 2 3 4 | <ItemTemplate> '></asp:Label> </ItemTemplate> </asp:TemplateField> |
在代码隐藏中,我只是将列表绑定到网格视图:
1 2 | gvBussinessRisks.DataSource = this.BusinessRiskList; gvBussinessRisks.DataBind(); |
列表属于"商业风险"类型。实体结构就像
2我的BusinessObjective类具有名为"BusinessObjecteText"的属性,我将其绑定到网格视图中的某一列。
但是,当我试图对这个列进行排序时,会出错。
我的排序事件如下:
1 2 3 4 5 |
"GenericComparer"类是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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; } } } |
当我试图将此列排序为
我试过谷歌,但没有找到任何解决方案。
最后,经过大量的谷歌和头脑风暴,我得到了解决方案,使用动态LINQ。
我放弃了泛型比较器类,只是在排序事件中编写了以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | string sortColumn = e.SortExpression; IQueryable<BusinessRisk> sortedList = (from p in this.BusinessRiskList select new BusinessRisk { BusinessRiskText = p.BusinessRiskText, IsActive = p.IsActive, Description = p.Description, BusinessObjective = new BusinessObjective { BusinessObjectiveText = p.BusinessObjective.BusinessObjectiveText } }).AsQueryable().OrderBy(e.SortExpression); this.BusinessRiskList = sortedList.ToList<BusinessRisk>(); gvBussinessRisks.DataSource = sortedList; gvBussinessRisks.DataBind(); |
它对我来说是完美的。
谢谢所有帮助我的人。