C# WinForms DataGridView从XML读取-can';无法筛选日期,因为它不';你不知道属性是日期时间吗?

C# WinForms DataGridView从XML读取-can';无法筛选日期,因为它不';你不知道属性是日期时间吗?,c#,xml,winforms,datagridview,C#,Xml,Winforms,Datagridview,我试图基于日期时间信息(早于或大于某个日期)过滤DataGridView,但当我创建过滤器时,它会说它无法将字符串与日期时间进行比较,因为它将XML文件中的所有信息读取为字符串,而我不知道如何键入它们有人能帮忙吗? 更详细的解释:我有一个XML文件,其中包含了我使用myDataSet.ReadXML()拉入数据集中的信息。在前面的步骤中,我自己创建了XML。以下是一个示例: <site> <subsite URL="http://website/home"> &l

我试图基于日期时间信息(早于或大于某个日期)过滤DataGridView,但当我创建过滤器时,它会说它无法将字符串与日期时间进行比较,因为它将XML文件中的所有信息读取为字符串,而我不知道如何键入它们有人能帮忙吗?

更详细的解释:我有一个XML文件,其中包含了我使用
myDataSet.ReadXML()
拉入数据集中的信息。在前面的步骤中,我自己创建了XML。以下是一个示例:

<site>
<subsite URL="http://website/home">
    <pages />
    <subsite URL="http://website/home/de-de">
        <pages>
            <page name="default_ex.xml" URL="http://www.my-website.com/home/de-de/default_ex.aspx" CreatedOn="8/23/2012 3:13:47 PM" CreatedBy="Joe Schmoe" LastModifiedOn="8/23/2012 3:17:44 PM" LastModifiedBy="Joe Schmoe" Version="1.0" PublishingStartDate="" PublishingExpirationDate="" ApprovalState="APPROVED" FileSize="1120" CheckedOutUser="" DaysSinceCreated="46" DaysSinceLastModified="46" IsPublicFacing="False"/>
        </pages>
    </subsite>
    <subsite URL="http://website/home/en-us">
        <pages>
            <page name="default_ex.xml" URL="http://www.my-website.com/home/en-us/default_ex.aspx" CreatedOn="8/23/2012 10:40:53 AM" CreatedBy="Joe Schmoe" LastModifiedOn="8/23/2012 2:55:15 PM" LastModifiedBy="Joe Schmoe" Version="2.0" PublishingStartDate="" PublishingExpirationDate="" ApprovalState="APPROVED" FileSize="1122" CheckedOutUser="" DaysSinceCreated="46" DaysSinceLastModified="46" IsPublicFacing="False"/>
        </pages>
    </subsite>
    <subsite URL="http://website/home/fr-fr">
        <pages>
            <page name="default_ex.xml" URL="http://www.my-website.com/home/fr-fr/default_ex.aspx" CreatedOn="8/2012 1:12:30 PM" CreatedBy="Boring Guy" LastModifiedOn="8/23/2012 11:59:41 AM" LastModifiedBy="Joe Schmoe" Version="1.1" PublishingStartDate="" PublishingExpirationDate="" ApprovalState="PENDING" FileSize="955" CheckedOutUser="" DaysSinceCreated="47" DaysSinceLastModified="46" IsPublicFacing="False"/>
        </pages>
    </subsite>
    <subsite URL="http://website/home/ja-jp">
        <pages>
            <page name="default_ex.xml" URL="http://www.my-website.com/home/ja-jp/default_ex.aspx" CreatedOn="8/23/2012 3:50:29 PM" CreatedBy="Mary Poppins" LastModifiedOn="8/23/2012 3:58:28 PM" LastModifiedBy="Mary Poppins" Version="1.0" PublishingStartDate="" PublishingExpirationDate="" ApprovalState="APPROVED" FileSize="1199" CheckedOutUser="" DaysSinceCreated="46" DaysSinceLastModified="46" IsPublicFacing="False"/>
        </pages>
    </subsite>
</subsite>
…到目前为止效果很好。我甚至可以很容易地对其进行过滤,但当我尝试基于不应该是字符串的属性(比如“LastModifiedOn”)进行过滤时,就像这样…:

myDataSet.ReadXml(@"MyData.xml");
myDataView = new DataView(myDataSet.Tables["Page"]);
myDataGridView.DataSource = myDataView;
myDataView.RowFilter = "PublishingExpirationDate > #" + DateTime.Now.Date.ToString() + "#";
…我得到一个错误,因为就DataView(或DataGridView,我不确定)而言,“PublishingExpirationDate”是字符串我如何能够基于非字符串列进行筛选?

注意:我对XML有点陌生,在前面的一步中,我自己在这个项目中创建了XML,因此如果需要修改语法,我可以修改语法,以使其工作,我只是不知道如何

请,谢谢!
-Keith

您已经发现了问题:XML文件中的“PublishingExpirationDate”字段被表示为字符串,而不是系统.DateTime,因此您的
DateTime
比较失败

一种解决方案是在创建XML时将该特定字段的数据类型指定为
DateTime

另一个选项是将设置为使用
Convert
功能。但是,如果您尝试此操作,您会发现它在“PublishingExpirationDate”字段中具有空值的记录上失败。要解决此问题,请使用
IIf
函数确定给定记录的此字段是否为空,以及它是否替换为将从比较中获得所需结果的任意
DateTime

您的
RowFilter
似乎排除了过去日期为“PublishingExpirationDate”的记录。在这种情况下,您可以将具有空“PublishingExpirationDate”字段值的记录的比较日期替换为
DateTime.Min

以下是您的过滤器的外观:

var filter = string.Format("CONVERT(IIF(LEN(PublishingExpirationDate) = 0,'{0}',PublishingExpirationDate),'System.DateTime') > #{1}#", DateTime.MinValue.ToString(), DateTime.Today.ToString());
myDataView.RowFilter = filter;

好极了!工作起来很有魅力。谢谢你,杰