2012-03-01 85 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