2012-03-01 89 views
1

如何按小時排序datagridview內部?我使用沒有格式的XML文件與數據集和datagridview。如何在datagridview中按日期排序

代碼C#的WinForms:在輸出我有

FileStream stream = new FileStream("file.xml", FileMode.Open); 
ds.readXml(stream); 
Stream.Close(); 
datagridview1.DataSource = ds.Tables[0]; 
ds.Tables[0].DefaultView.Sort = "start asc"; 

XML文件

<?xml version="1.0" standalone="yes"?> 
<Table> 
    <hours> 
    <Start>10:00 AM</Start> 
    </hours> 
<hours> 
    <Start>11:00 AM</Start> 
    </hours> 
<hours> 
    <Start>1:00 PM</Start> 
    </hours> 
<hours> 
    <Start>2:00 PM</Start> 
    </hours> 


</Table> 

,沒有排序。 下午1時00分 下午2點00分 上午10點00 上午11時00

+0

這些都是字符串,而不是日期... – 2012-03-01 18:15:05

回答

0

看來,數據被加載爲字符串,而不是一個DateTime值。它正確地排序爲一個字符串。您是否希望將其排序爲日期,那麼您需要將數據從string轉換爲DateTime。這裏是轉換數據的例子:

var accTable = new DataTable(); 

var columnSpec = new DataColumn("Date"); 
columnSpec.DataType = typeof(DateTime); 
accTable.Columns.Add(columnSpec); 

http://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/e6b2aa61-bd1a-40f9-9e45-a538ed42c3d3

一旦轉換數據,它應該作爲排序的日期。

以下是有關在DataGridView轉換數據上SO另一個問題:

How to programmatically convert column type in DataGridView C#?

1

您可以添加類型DateType的另一列,並設置它的表達的「開始」名稱列和排序使用此列:

 FileStream stream = new FileStream("file.xml", FileMode.Open); 
     DataSet ds = new DataSet(); 
     ds.ReadXml(stream); 
     ds.Tables[0].Columns.Add("Temp", typeof(DateTime), "Start"); 
     stream.Close(); 
     dataGridView1.DataSource = ds.Tables[0]; 
     ds.Tables[0].DefaultView.Sort = "temp asc"; 
+0

我試過,但如果我重新啓動我的申請,我有一個錯誤信息:名爲「溫度」一列已經屬於這個數據表。 – user1112847 2012-03-04 04:52:13

+0

是否可以刪除添加的列?..我試過但沒有運氣,當我關閉應用程序。 – user1112847 2012-03-04 05:12:46