2011-03-29 78 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