2011-03-29 69 views
0

我有一个数据表填充了数据类型为int的可空年份列。另外,每当这一年发生变化时,我都会添加一个空白行。如何对此进行排序?

DataTable table = new DataTable(); 
table.Columns.Add("Year", typeof(int)); 
table.Columns["Year"].AllowDBNull = true; 

目录实例:

2005 
2005 
DBNull.Value 
2006 
DBNull.Value 
2007 

在逐行基础,只能够看看当前行和下一行,我将如何解决这使得DBNull.Value行仍然分开几年的差异?

谢谢!

+0

数据库中空条目的用途是什么? – roberttdev 2011-03-29 16:11:23

+0

哪个版本的.net框架使用? – 2011-03-29 16:12:01

+1

你确定DataTbale是最好的解决方案吗?并排序什么? – 2011-03-29 16:12:23

回答

2

我一般不喜欢这种设计,但这里是你如何做到的。

添加另一个double类型的列,它将隐藏在显示屏中,并称之为“SortYear”。对于有年份的行,将年份放在这个隐藏的列中。对于前一年加上0.5的空行。然后按SortYear进行排序,然后根据您真正想要排序的列进行排序。

Year   SortYear ServiceDescription (or whatever) 
2005   2005.0 Internet Service 
2005   2005.0 Upgraded Cap Limits 
DBNull.Value 2005.5 
2006   2006.0 Internet Service 
DBNull.Value 2006.5 
2007   2007.0 Internet Service 



order by SortYear, ServiceDescription 
+0

+1,正是我在想的。 – 2011-03-29 16:25:19

+0

有趣。我会试一试。 – 2011-03-29 16:28:21

+0

@ subt13 - 尽管我回答了您提出的问题,但我仍想强调,这种事情不是做软件工程的方式。这种骇人听闻的方式,任何工作方式的解决方案都会导致严重的问题。你应该永远不要在这个级别混合数据和显示元素。 – 2011-03-29 16:34:29

1

您需要另一列来执行实际排序。使用时间戳或类似的东西,所以你可以按照他们插入的顺序排序,但显示年份列与现在一样。

+0

甚至只是一个小数,2005.0,2005.0,2005.5,2006.0,2006.5,..,2007.0(其中十进制的有效数字表示年份之间的分隔) – 2011-03-29 16:23:39