如何在网格视图中对数据进行排序



我正在尝试对网格视图中的数据进行排序

一切正常,但数字列(标记)仅对第一个数字进行排序

法典:

 protected void gvTrHty_Sorting(object sender, GridViewSortEventArgs e)
    {
        try
        {
            this.gviewSorting(e.SortExpression);
        }
        catch (Exception ex)
        {
            string arg_15_0 = ex.Message;
        }
    }
 private void gviewSorting(string strSortExp)
    {
        if (this.ViewState["dvTrain"] == null)
        {
            DataSet dataSet = this.BindTraining();
            dv = dataSet.Tables[0].DefaultView;
        }
        else
        {
            DataSet dataSet2 = (DataSet)this.ViewState["dvTrain"];
            TrainingHistory.dv = dataSet2.Tables[0].DefaultView;
        }
        if (TrainingHistory.sortorder)
        {
            TrainingHistory.sortorder = false;
            TrainingHistory.dv.Sort = strSortExp + " DESC";
        }
        else
        {
            TrainingHistory.sortorder = true;
            TrainingHistory.dv.Sort = strSortExp;
        }
        this.BindData(TrainingHistory.dv);
    }

如果我在网格视图中的标记(列)中有值

   Marks----> When I click this for sorting it's taking     Marks     
    1                                                         1                            
    8                         1st number only sorted  --->    12
    40                                                        21 
    12                                                        40
    21                                                        8 

它将您的"数字"数据视为字符串并针对此字符串值进行排序,因此"40"小于"8"。

您的选择是:

  1. 在数值字段值上放置前导零,由于显而易见的原因,这可能是不行的,这将使现有排序正常工作。我想你可以暂时放前导零,然后在排序后把它们撕掉,但这听起来很头疼。
  2. 实现你自己的排序逻辑,如下所示:

    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()传递此帮助程序类的新实例(向其传递要作为排序依据的列和要排序的方向 - 升序或降序)。

由于上面的比较器逻辑使用泛型,因此您可以传递要排序的任何类型(即 intDateTime,甚至整个域对象)。

相关内容

  • 没有找到相关文章

最新更新