我正在尝试向DataGidView添加行过滤器
列类型是从数据库中提取的日期
我使用了DateTimePicker来允许用户选择日期,但是我不断收到错误消息
" String未被识别为有效的DateTime。"
我的代码在当时的ValueChanged事件中触发,如下所示
dt.DefaultView.RowFilter = cmbColumns.Text.ToString & " =#" & dtpFilter.Value.ToString("dd/MM/yyyy") & "#"
我尝试了很多这方面的变种, a)喜欢将datetime传递给字符串变量 b)剥离时间方面并在字符串中手动构建日期
我最终想确认日期是英国格式并且有效
任何帮助都会受到赞赏,因为我一直都在这一天
答案 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"下的一些数据培养:
除了改变文化之外没有做任何其他事情,VIEW变为:
它们是以不同方式显示的相同日期。它是DGV的视图方面的所有部分。要将DataGridView
过滤为日期:
DataView
结果:
zDV.RowFilter = String.Format("ZDate = '{0}'", #10/14/2010#)
中的数据仍然是数据 - 未针对文化或其他任何格式进行格式化。由于DateTime没有格式,您不必担心它。上面的代码在过滤器中传递了文化不变/美国日期(m / d / y),但它有效。原因是因为DataView
只是一个数字而没有格式。
您的代码显然令人窒息的一件事是过滤器表达式。这必须与文化不变顺序(DateTime
)一样,与定义日期文字的方式相同:MM/dd/yyyy
。
我使用的字符串格式版本使其易于阅读和定义多个条件:
Dim myDT = #02/29/2016#