我正在尝试使用此代码
过滤日期时间列Private Sub RowFilter(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtUser.TextChanged, dtpEnd.ValueChanged, dtpStart.ValueChanged
Dim dv As New DataView(dtAudit)
dv.RowFilter = String.Format("`{0}` Like '%{1}%'", dgAudit.Columns(2).Name, txtUser.Text)
dgAudit.DataSource = dv
Dim newDV As New DataView(dv.ToTable)
newDV.RowFilter = String.Format("`{0}` >= #{1}# and `{0}` <= #{2}#", dgAudit.Columns(5).Name, Format(dtpStart.Value, "dd/MM/yyyy"), Format(dtpEnd.Value, "dd/MM/yyyy"))
dgAudit.DataSource = newDV
End Sub
我有一个日期2/4/2015(feb-4-2015)当我输入dtpEnd作为2015年2月3日它仍然显示日期。当我在dtpStart上输入2/3/2015时它没有显示日期..就像添加1天或者其他东西一样。我该如何解决这个问题?
答案 0 :(得分:0)
就像VB文字一样,日期必须是#M/dd/yyyy#
格式。正确的方法是简单地将您的DataTable
绑定到网格,然后将其过滤到一行,如下所示:
Dim table = DirectCast(dgAudit.DataSource, DataTable)
Dim textColumn = dgAudit.Columns(2).Name
Dim dateColumn = dgAudit.Columns(5).Name
table.DefaultView.RowFilter = String.Format("[{0}] = '%{1}%' AND [{2}] >= #{3:M/dd/yyyy}# AND [{2}] <= #{4:M/dd/yyyy}#",
textColumn,
txtUser.Text,
dateColumn,
dtpStart.Value,
dtpEnd.Value)