DataView RowFilter和有效的UK DateTime

时间:2016-03-04 16:45:39

标签: .net vb.net datetimepicker

我正在尝试向DataGidView添加行过滤器

列类型是从数据库中提取的日期

我使用了DateTimePicker来允许用户选择日期,但是我不断收到错误消息

" String未被识别为有效的DateTime。"

我的代码在当时的ValueChanged事件中触发,如下所示

dt.DefaultView.RowFilter = cmbColumns.Text.ToString & " =#" & dtpFilter.Value.ToString("dd/MM/yyyy") & "#"

我尝试了很多这方面的变种, a)喜欢将datetime传递给字符串变量 b)剥离时间方面并在字符串中手动构建日期

我最终想确认日期是英国格式并且有效

任何帮助都会受到赞赏,因为我一直都在这一天

1 个答案:

答案 0 :(得分:2)

Sub PopulateNames() Dim c As Range With Sheets("Master") 'Loop through all cells in column D looking for "X" For Each c In .Range("D2:D" & .Cells(Rows.CountLarge, "D").End(xlUp).Row) If c.Value = "X" Then 'Copy the data from column A-C over to Tournament1 Sheet .Range("A" & c.Row & ":C" & c.Row).Copy Sheets("Tournament1").Range("A" & _ Sheets("Tournament1").Cells(Rows.CountLarge, "A").End(xlUp).Row + 1) End If 'Optionally resize columns so contents fit Sheets("Tournament1").Columns.AutoFit Next c 'Loop through all cells in column E looking for "X" For Each c In .Range("E2:E" & .Cells(Rows.CountLarge, "E").End(xlUp).Row) If c.Value = "X" Then 'Copy the data from column A-C over to Tournament2 Sheet .Range("A" & c.Row & ":C" & c.Row).Copy Sheets("Tournament2").Range("A" & _ Sheets("Tournament2").Cells(Rows.CountLarge, "A").End(xlUp).Row + 1) End If 'Optionally resize columns so contents fit Sheets("Tournament2").Columns.AutoFit Next c End With End Sub 类型没有格式。顾名思义,DateTime提供了一个数据视图,它尊重系统的文化设置以及您正在进行的任何单元格格式。 " en-US"下的一些数据培养:

enter image description here

除了改变文化之外没有做任何其他事情,VIEW变为:

enter image description here

它们是以不同方式显示的相同日期。它是DGV的视图方面的所有部分。要将DataGridView过滤为日期:

DataView

结果:

enter image description here

zDV.RowFilter = String.Format("ZDate = '{0}'", #10/14/2010#) 中的数据仍然是数据 - 未针对文化或其他任何格式进行格式化。由于DateTime没有格式,您不必担心它。上面的代码在过滤器中传递了文化不变/美国日期(m / d / y),但它有效。原因是因为DataView只是一个数字而没有格式

您的代码显然令人窒息的一件事是过滤器表达式。这必须与文化不变顺序(DateTime)一样,与定义日期文字的方式相同:MM/dd/yyyy

我使用的字符串格式版本使其易于阅读和定义多个条件:

Dim myDT = #02/29/2016#