2015-02-06 127 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)