2015-02-06 87 views
0

我想使用此代码如何筛选日期和时间

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 

我有过滤日期时间列的日期2015年2月4日(2月-4-2015)当我进入dtpEnd为2/3/2015它仍然显示日期。当我在dtpStart上输入2/3/2015时,它不显示日期..这就像添加1天或什么东西。我如何解决这个问题?

+0

将生产和error.The列的名称是“日期和时间”。这就是为什么我需要'识别专栏。 #用于识别日期格式。 – IWantToLearn 2015-02-06 02:51:55

回答

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)