2012-07-17 70 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))