我几天前一直试图解决这个问题而没有结果,所以任何帮助都会受到赞赏。
我以格式(dd / mm / yyyy hh:nn:ss am / pm)从数据库中检索日期字段,我希望将其保留用于排序和其他目的,并且我想在XtraReport中显示格式格式(dd / mm / yyyy)
详细信息: 我正在开发一个包含DevExpress报告的VB.Net项目。我的XtraReport问题包括其数据中的日期字段,我将报表的标签绑定到项目的DataSet中的空DataTable,我填充数据表并将报表绑定到运行时的datatable。一切都很好,除了使用标签的SmartTag编辑FormatString属性似乎对输出结果没有任何影响。 请注意,我不想更改源SQL查询格式。
谢谢, 穆罕默德
答案 0 :(得分:0)
如果您的数据库返回值为DateTime
类型的列,则可以使用Binding.Format
来设置值的格式。
这是一个例子:
Dim dataTable As New DataTable("Data")
dataTable.Columns.Add("DateTime", Type.GetType("System.DateTime"))
dataTable.Rows.Add(New DateTime(2003, 10, 5, 19, 12, 15))
dataTable.Rows.Add(New DateTime(1987, 1, 4, 11, 47, 53))
dataTable.Rows.Add(New DateTime(2010, 6, 25, 7, 25, 14))
Dim label As New XRLabel()
label.DataBindings.Add(New XRBinding("Text", Nothing, "DateTime", "{0:dd'/'MM'/'yyyy}"))
Dim detail As New DetailBand()
detail.Controls.Add(label)
Dim report As New XtraReport()
report.Bands.Add(detail)
report.DataSource = dataTable
Dim tool As New ReportPrintTool(report)
tool.ShowRibbonPreview()
如果您的数据库返回值为String
类型的列,则可以在表达式中使用CalculatedField
和Substring
函数。
这是一个例子:
Dim dataTable As New DataTable("Data")
dataTable.Columns.Add("DateTimeString", Type.GetType("System.String"))
dataTable.Rows.Add("05/10/2003 19:12:15")
dataTable.Rows.Add("04/01/1987 11:47:53")
dataTable.Rows.Add("25/06/2010 07:25:14")
Dim calculatedField As New CalculatedField()
calculatedField.Name = "DateTime"
calculatedField.Expression = "Substring(DateTimeString,0,10)"
Dim label As New XRLabel()
label.DataBindings.Add(New XRBinding("Text", Nothing, "DateTime"))
Dim detail As New DetailBand()
detail.Controls.Add(label)
Dim report As New XtraReport()
report.Bands.Add(detail)
report.DataSource = dataTable
report.CalculatedFields.Add(calculatedField)
Dim tool As New ReportPrintTool(report)
tool.ShowRibbonPreview()
结果:
答案 1 :(得分:0)
这个答案的灵感来自Ciaráncommet:
除非当然,否则数据库应将列作为日期/时间返回 它存储为字符串。你知道它是如何存储的吗?
字段类型是日期/时间格式。我想念的是我在SELECT语句中使用FORMAT()方法如下:
SELECT ID, FORMAT(SalDT,'dd/mm/yyyy hh:nn:ss am/pm') AS InvoiceDates
确实返回String而不是原始DateTime格式。我已经更改了查询以添加包含CDATE()并且它有效:
SELECT ID, CDATE(FORMAT(SalDT,'dd/mm/yyyy hh:nn:ss am/pm')) AS InvoiceDates
由于返回的格式现在是DateTime格式,我的XtraReport能够应用我在标签的智能标签中编辑的FormattingString dd / mm / yyyy。
感谢Ciarán和nempoBu4的帮助。
穆罕默德