C# 如何在gridview中对数据进行排序?
我正在尝试在gridview中对数据进行排序C# 如何在gridview中对数据进行排序?,c#,asp.net,gridview,gridview-sorting,C#,Asp.net,Gridview,Gridview Sorting,我正在尝试在gridview中对数据进行排序 Marks----> When I click this for sorting it's taking Marks 1 1 8 1st number only sorted --->
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
一切正常,但数字列(标记)只对第一个数字进行排序
代码:
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);
}
如果我在gridview的标记(列)中有值
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”
你的选择是:
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);
}
}
}
公共密封类GenericComparer:IComparer
{
公共枚举排序器
{
升序=0,
递减=1
}
私有字符串排序列;
私人分拣员分拣订单;
公共字符串排序列
{
收到
{
返回此.sort列;
}
}
公共分拣机分拣订单
{
收到
{
返回此.sortingOrder;
}
}
公共泛型比较器(字符串排序列,排序顺序排序器排序顺序)
{
this.sort列=排序列;
this.sortingOrder=排序顺序;
}
公共整数比较(TX,TY)
{
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)
{
返回object1.CompareTo(object2);
}
其他的
{
返回object2.CompareTo(object1);
}
}
}
.Sort()
方法的调用中,您传递了这个helper类的一个新实例(传递给它您想要排序的列和您想要排序的方向-升序或降序)
由于上面的比较器逻辑使用泛型,因此您可以传递任何要排序的类型(即
int
、DateTime
,甚至是整个域对象)。它执行字母排序,而不是数字排序。标记列是否在某处转换为文本?是否使用绑定列表作为数据源?如果没有,你能做到吗?