2011-06-13 57 views
5

数据我有以下数据为什么DataTable.Select排序默认

Name   Value Percent 
0-3 months 0  0 
3-12 months 0  0 
1-5 years  1234.12 28 
5-10 years 13144.11 68 
10-15 years 0  0 
Over 15 years 1233.44 14 
Other Income 2245.12 

的数据集时,我尝试

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

编辑:其实,类似上面的代码。我正在使用类似的循环来添加数据以显示最终写入图表的存储桶。

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    //Add to the display bucket 
} 

我得到的数据进行排序,如:

0-3 months 
10-15 years 
1-5 years 
3-12 months 
5-10 years 
Over 15 years 

为什么?我怎样才能将数据排序?这是很重要的,因为我在图表对象中显示数据。我在这里错过了什么吗?

+0

如果您强制排序,我不认为它会被改变。 – IAbstract 2011-06-13 18:55:57

+0

似乎您的数据按第一列排序,如同文本。但是,为什么这很重要? – 2011-06-13 18:56:47

+0

我没有强制任何排序,这是来自默认顺序的数据库。订购对用户很重要。 – 2011-06-13 19:13:28

回答

0

尝试:

foreach (DataRow dr in dsMaturity.Tables[0].Select("name not like 'Other%'", "column_to_sort_by")) 
{ 
    TotalValue += double.Parse(dr["Value"].ToString()); 
} 

其中column_to_sort_by是排序按正确的顺序列。

0

你从哪里得到数据?

如果它来自数据库,那么我会检查并查看手动运行查询时的顺序。

杰夫

+0

数据由过程创建,并将它们添加到返回数据集。我无权修改该程序。我得到的数据,只是想以相同的顺序显示它。 – 2011-06-13 19:15:32

0

如果数据已经排序中这可能是为什么它似乎排序的数据库。您呈现的数据看起来按名称排序。这是如何在数据库中?

+0

这不是一个简单的select语句和order by子句类型的查询。数据库通过一些规则创建这些行。我提到的数据集是我从数据库中得到的。现在我如何使用select而不重新排列原始数据集中的记录? – 2011-06-13 19:18:51

1

我不知道为什么/如何解决这个不改变原始ResultSet,但这里是我的解决办法:

foreach (DataRow dr in dsMaturity.Tables[0].Rows) 
{ 
    if (!dr["Name"].ToString().StartsWith("Other ")) 
    { 
     // adding it to display bucket 
    } 
} 
2

dataTable.Select(filterExpression)不保证排序顺序。正如文件所述,您应该使用其他重载提供您的排序顺序。

在我们的实验中,结果集由过滤器列排序,但我不相信.NET的后续版本行为方式相同(因为它没有以这种方式记录)。

0

同意!这很烦人...我有同样的问题。

如果您安装了.NET 3.5或更高版本可以使用Linq可过滤行:

var rows = dt.Rows.Cast<DataRow>().Where(r => !((string)r["Name"]).StartsWith("Other") 
1

我也有这个问题,答案是:

dataTable.AsEnumerable(); 

,而不是

dataTable.Select();