2012-07-17 46 views
0

我有這個日期到我的DGV:使用的RowFilter日期VB.NET

14/06/2012 
15/07/2012 
16/07/2012 
17/07/2012 

我設置了過濾器,以這樣的:([supplier_invoice_date] >= '13/07/2012') AND ([supplier_invoice_date] <= '17/07/2012')

過濾器返回此(所有日期)

14/06/2012 
15/07/2012 
16/07/2012 
17/07/2012 

另一項測試:

篩選:([supplier_invoice_date] >= '15/07/2012') AND ([supplier_invoice_date] <= '17/07/2012')

結果:

15/07/2012 
    16/07/2012 
    17/07/2012 

篩選:([supplier_invoice_date] < '17/06/2012')

結果:

14/06/2012 
15/07/2012 
16/07/2012 

我認爲它只是服用天還不需要幾個月的時間。

這裏是我的代碼:

Dim dt As New DataTable 
Dim suppliersinvoices_data_query As String = ("DATE_FORMAT(MIN(supplier_invoice_date), '%d/%m/%Y') AS supplier_invoice_date, ...") 
Dim invoice_objDataAdapter As New MySqlDataAdapter(suppliersinvoices_data_query, objConn) 
invoice_objDataAdapter.Fill(dt) 

Dim MyFilter As New DataView(dt) 
MyFilter.RowFilter = "([supplier_invoice_date] >= '13/07/2012') AND ([supplier_invoice_date] <= '17/07/2012')" 
invoicesresults_datagrid_search_supplierinvoice.DataSource = MyFilter 
+0

我認爲你需要將字符串轉換爲日期/時間 – roymustang86 2012-07-17 21:22:39

+0

@ roymustang86,你可以讓我的一些例子來嘗試?謝謝 – 2012-07-17 21:24:35

+0

你可以發佈一些你的代碼嗎? – roymustang86 2012-07-17 21:31:11

回答

1

這是DataView.RowFilter語法for日期:

dataView.RowFilter = "supplier_invoice_date >= #2012-07-13#" 

但是你也可以使用Linq-To-DataSet。我認爲該領域的實際數據類型是String而不是Date,所以你需要將它解析到Date第一:

Dim startDate = New Date(2012, 7, 13) 
Dim endDate = New Date(2012, 7, 17) 
Dim invoiceDate As Date 
Dim filtered = From row In dt.AsEnumerable() 
    Where Date.TryParse(row.Field(Of String)("supplier_invoice_date"), invoiceDate) _ 
    AndAlso invoiceDate >= startDate AndAlso invoiceDate <= endDate 
Dim tblFiltered As DataTable = filtered.CopyToDataTable() 
+0

我收到此錯誤:指定的轉換無效。看看這個請:http://i49.tinypic.com/28a2moj.png – 2012-07-17 22:22:13

+0

我用C#翻譯到VB.NET – 2012-07-17 22:24:26

+0

@JohnNuñez:對不起,我沒有提到VB.N ET標籤,很快就會編輯。例外的原因是DataRow中的字段不是日期,但(我假設)一個字符串。你需要首先解析它到一個日期。 – 2012-07-17 22:27:56

1

看起來要轉換的日期字符串,以格式化。儘量避免這種情況,並讓網格使用它從數據源獲取的日期值。

如果要格式化DataGridView控件的日期,嘗試這樣的:

dgv1.Columns("YourDateColumn").DefaultCellStyle.Format = "dd/MM/yyyy" 

然後你可以使用真正的日期來過濾數據:

MyFilter.Filter = String.Format("[supplier_invoice_date] > '{0}'", _ 
           New DateTime(2012, 7, 1))