Xml 文件从 gridview 导出后显示不正确的时间数据
Xml file show incorrect time data after exported it from gridview
我有一个显示一些信息的网格视图。这些信息之一是时间数据,例如:19:40:00.0000000。当我尝试使用 WriteXml 将我的 gridview 导出到 xml 文件时,我发现我当时的数据不正确,它看起来像:PT7H50M .
--> 我的时间数据:gridview 中的 19:40:00.0000000 在导出到 xml 文件后转换为:PT7H50M 为什么以及如何解决这个问题?
这是我的 gridview 中的时间数据:
这是 xml 文件中的样子:
这是导出代码:
DataTable Rdt = new DataTable();
DataSet Rds = new DataSet();
Rdt = (DataTable)GV_Report.DataSource;
Rds.Tables.Add(Rdt.Copy());
Rds.WriteXml(@"c:\Reporting\Work_Hours_Report.xml", System.Data.XmlWriteMode.IgnoreSchema);
XmlDocument doc = new XmlDocument();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(@"c:\Reporting\ReportType.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program...Please do not change this file!!");
writer.WriteStartElement("ReportBut");
writer.WriteElementString("ButType", "Work_Hours_Report");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
我试图通过向每个选定的列添加别名来编辑我的 SQL 语句,但不幸的是它没有任何改进:
select CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([Total_H],'00:00:00') AS DATETIME))),0) AS TIME) as '1',sum([HTotal]) as '2',sum([MTotal]) as '3',CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([PH_Total],'00:00:00') AS DATETIME))),0) AS TIME) as '4',sum([PH]) as '5',sum([PM]) as '6',CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([AH_Total],'00:00:00') AS DATETIME))),0) AS TIME) as '7',sum([AH]) as '8',sum([AM]) as '9' FROM [QAMNI].[dbo].[tbl_WorkHours_Details] where [Date] between '" + DF + "' and '" + DT + "' and [C_ID] ='" + txt_C_ID.Text + "'
根据@Flynn1179先生的推进
我将 XmlWriteMode 从 IgnoreSchema 更改为 WriteSchema,结果是正确的,没有任何 xsd:dayTimeDuration 表示以天数、小时数、分钟数和秒数表示的持续时间。 xsd: dayTimeDuration 的格式在我的报告文件中是 PnDTnHnMnS,一旦我更改它,我就从我的数据库中得到了与 select 完全相同的时间,格式没有任何变化。谢谢大家的帮助。
这是我将 XmlWriteMode 从 IgnoreSchema 更改为 WriteSchema 后的 XML 文件:
它仍然显示为 xsd 格式,但是当我使用 crystal 报告将其打印给最终用户时,它给我正确的时间格式为(“hh:mm:ss”):
这是我在代码中所做的更改:(仅更改 XmlWriteMode)
Rds.WriteXml(@"c:\Reporting\WorkHours_Report.xml", System.Data.XmlWriteMode.WriteSchema);
我有一个显示一些信息的网格视图。这些信息之一是时间数据,例如:19:40:00.0000000。当我尝试使用 WriteXml 将我的 gridview 导出到 xml 文件时,我发现我当时的数据不正确,它看起来像:PT7H50M .
--> 我的时间数据:gridview 中的 19:40:00.0000000 在导出到 xml 文件后转换为:PT7H50M 为什么以及如何解决这个问题?
这是我的 gridview 中的时间数据:
这是 xml 文件中的样子:
这是导出代码:
DataTable Rdt = new DataTable(); DataSet Rds = new DataSet();
Rdt = (DataTable)GV_Report.DataSource;
Rds.Tables.Add(Rdt.Copy());
Rds.WriteXml(@"c:\Reporting\Work_Hours_Report.xml", System.Data.XmlWriteMode.IgnoreSchema);
XmlDocument doc = new XmlDocument();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
XmlWriter writer = XmlWriter.Create(@"c:\Reporting\ReportType.xml", settings);
writer.WriteStartDocument();
writer.WriteComment("This file is generated by the program...Please do not change this file!!");
writer.WriteStartElement("ReportBut");
writer.WriteElementString("ButType", "Work_Hours_Report");
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
我试图通过向每个选定的列添加别名来编辑我的 SQL 语句,但不幸的是它没有任何改进:
select CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([Total_H],'00:00:00') AS DATETIME))),0) AS TIME) as '1',sum([HTotal]) as '2',sum([MTotal]) as '3',CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([PH_Total],'00:00:00') AS DATETIME))),0) AS TIME) as '4',sum([PH]) as '5',sum([PM]) as '6',CAST(DATEADD(MILLISECOND,SUM(DATEDIFF(MILLISECOND,0,CAST(ISNULL([AH_Total],'00:00:00') AS DATETIME))),0) AS TIME) as '7',sum([AH]) as '8',sum([AM]) as '9' FROM [QAMNI].[dbo].[tbl_WorkHours_Details] where [Date] between '" + DF + "' and '" + DT + "' and [C_ID] ='" + txt_C_ID.Text + "'
根据@Flynn1179先生的推进
我将 XmlWriteMode 从 IgnoreSchema 更改为 WriteSchema,结果是正确的,没有任何 xsd:dayTimeDuration 表示以天数、小时数、分钟数和秒数表示的持续时间。 xsd: dayTimeDuration 的格式在我的报告文件中是 PnDTnHnMnS,一旦我更改它,我就从我的数据库中得到了与 select 完全相同的时间,格式没有任何变化。谢谢大家的帮助。 这是我将 XmlWriteMode 从 IgnoreSchema 更改为 WriteSchema 后的 XML 文件:
它仍然显示为 xsd 格式,但是当我使用 crystal 报告将其打印给最终用户时,它给我正确的时间格式为(“hh:mm:ss”):
这是我在代码中所做的更改:(仅更改 XmlWriteMode)
Rds.WriteXml(@"c:\Reporting\WorkHours_Report.xml", System.Data.XmlWriteMode.WriteSchema);