2012-03-07 96 views
1

我有一个查询在那里我得到了一些列的数据库是简单的SELECT语句,然后我将列添加到这个数据表为:排序的DataTable和排名使用比

dt.Columns.Add(new DataColumn("ratio", typeof(double))); 

然后,我有一个名为排名另一列是手动再次添加如下:

dt.Columns.Add(new DataColumn("Rank", typeof(int))); 
现在

我怎么首先排序比的,然后使用比例如增加排名较高的比率越高例如秩如果比为3,5和9,一旦由比命令它应该是:

rank ratio 
1 9 
2 5 
3 3 

编辑:

的比率是通过将两列计算在我的查询

foreach (DataRow row in dt.Rows) 
{ 
row["Ratio"] = (Convert.ToDecimal(row["LastMonth"])/NoOfBranches).ToString("0.##"); 
} 

由于从数据库

+1

如果您告诉我们您如何确定比例,我可以让您直接从SQL Server获得该查询(假设这是您的RDBMS),而无需将它们添加到C#代码中 – 2012-03-07 15:52:07

+0

您可以获得每行使用您的比率数据只有或有一个应用程序规则才能得到它? – 2012-03-07 15:53:27

+0

@Adrian我用比我的SQL查询两个字段计算 - 我会更新这个问题 – Zaki 2012-03-07 15:53:36

回答

1

如果你想从世界的C#方这样做:

DataTable dt = new DataTable(); 
dt.DefaultView.Sort = "ratio DESC"; 
dt.Columns.Add(new DataColumn("Rank", typeof(int))); 
int count = 1; 
foreach (DataRowView dr in dt.DefaultView) 
{ 
    dr["Rank"] = count++; 
} 

每当使用DataTable,你需要参考dt.DefaultView,因为它是表的排序的版本。请参阅MSDN的更多信息:

http://msdn.microsoft.com/en-us/library/system.data.datatable.defaultview.aspx

+0

这个工作,但是当我回到它不排序的数据表... – Zaki 2012-03-07 16:06:15

+0

每当你使用任何东西的数据表,你需要将它称为:dt.DefaultView或将在订货,它被放置在数据表中首先。 – ImGreg 2012-03-07 16:07:55

+1

酷就解决它,你需要编辑你的代码的foreach(DataRowView的医生.....谢谢:) – Zaki 2012-03-07 16:11:54

1

直接:

SELECT RANK() OVER (ORDER BY ratio DESC) AS rank,ratio FROM [YourTableName] 
+0

如果您想从数据库端执行操作,这是一个很好的答案。 +1 – ImGreg 2012-03-07 16:15:56

2

使用信息 您给予我们的restrinctions,我会建议下一代码:从forum post提取

dt.Columns.Add(new DataColumn("Ratio", typeof(double))); 
dt.Columns.Add(new DataColumn("Rank", typeof(int))); 

foreach (DataRow row in dt.Rows) 
{ 
    row["Ratio"] = 
     (Convert.ToDecimal(row["LastMonth"])/NoOfBranches).ToString("0.##"); 
} 
//sorting the DataTable using the new DataColumn 
dt.DefaultView.Sort = "Ratio DESC"; 
//after the sort, set the rank for each one 
int rank = 1; 
foreach (DataRow row in dt.Rows) 
{ 
    row["Rank"] = rank++; 
} 

例。

+0

你需要从ASC切换到排序DESC。他想要高到低的比例。 – ImGreg 2012-03-07 16:14:46

+1

@ImGreg答案编辑,并添加代码以设置秩柱和 – 2012-03-07 16:18:14

+0

1感谢答案值 – Zaki 2012-03-07 16:22:04