【发布时间】:2010-09-10 12:55:42
【问题描述】:
我的 DataView 表现得很有趣,它按字母顺序排序,我需要它按数字排序。我在整个网络上都查看了这个,发现了很多关于如何使用 ICompare 对其进行排序的想法,但没有一个真正可靠的。
所以我的问题是
- 如何在 DataView 上实现 ICompare(在此处查找代码)。
- 如何正确破译满是实际字符串的列和满是数字(带逗号)的列。
我需要代码来帮助我解决这个问题。我或多或少迷失了 ICompare 的想法以及如何在不同的场景中实现,所以一个好的解释会很好。
另外,请不要给我链接。我正在寻找关于这个问题的可靠答案。
我使用的一些代码。
DataView dataView = (DataView)Session["kingdomData"];
dataView.Sort = e.SortExpression + " " + ConvertSortDirectionToSql(e.SortDirection);
gvAllData.DataSource = dataView;
gvAllData.DataBind();
private string ConvertSortDirectionToSql(SortDirection sortDirection)
{
string newSortDirection = String.Empty;
if (Session["SortDirection"] == null)
{
switch (sortDirection)
{
case SortDirection.Ascending:
newSortDirection = "ASC";
break;
case SortDirection.Descending:
newSortDirection = "DESC";
break;
}
}
else
{
newSortDirection = Session["SortDirection"].ToString();
switch (newSortDirection)
{
case "ASC":
newSortDirection = "DESC";
break;
case "DESC":
newSortDirection = "ASC";
break;
}
}
Session["SortDirection"] = newSortDirection;
return newSortDirection;
}
对于该场景,我动态构建了一个数据表并将其推入数据视图中,在该数据视图中我将数据视图放入网格视图中,同时还记得将数据视图放入会话对象中以实现排序功能。
当用户调用 gridview 对列进行排序时,我会调用 session 对象中的 dataview 并构建 dataview 排序表达式,如下所示:
dataview.sort = e.sortexpression + " " + e.Sortdirection;
或者类似的东西。所以通常出现的结果适用于所有真正的字符串,例如
汽车;家;斯科特;扎克等...
但是当我对带有逗号分隔值的数字字段执行相同操作时,它会出现类似
900; 800; 700; 600; 200; 120; 1,200; 12,340; 1,000,000;
明白我的意思了吗?它只是将项目排序为 alpha 排序而不是自然排序。我想让我的 Dataview 自然正确地对数字列进行排序,就像
120; 200; 600; 700; 800; 900; 1,200; 12,340; 1,000,000;
让我知道你能做些什么来帮助我。
附言我浏览了无数关于如何做到这一点的文章,他们都说要推入一个列表/数组并这样做,但是有没有更有效的方法?
【问题讨论】:
标签: .net asp.net dataview icomparable