2014-02-18 3 views
1

Я пытаюсь отфильтровать свою базу данных, чтобы показать все заказы на дату, выбранную из календаря, который у меня есть в моей форме. Это код, который я написал ...Как использовать BindingSource.Filter для даты в Visual Basic 2012?

Public selDate As DateTime 
Dim response As Integer 

Public Sub FilterBooking(selDate) 
    '// Here I will create a filter to for boookings on selected date from calender 

    Dim dateFrom As DateTime 
    Dim dateTo As DateTime 

    dateFrom = selDate & " 00:00:01" 
    dateTo = selDate & " 23:59:59" 
    MsgBox(dateFrom) 
    MsgBox(dateTo) 

    Me.QueryBookingInfoBindingSource.Filter = "BookingDate >= #" & dateFrom & "# AND BookingDate <= #" & dateTo & "#" 
End Sub 

Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'TODO: This line of code loads data into the 'GarageDataSet.queryBookingInfo' table. You can move, or remove it, as needed. 
    Me.QueryBookingInfoTableAdapter.Fill(Me.GarageDataSet.queryBookingInfo) 
    'set currently selected date in the main calender to selDate variable 
    selDate = mainCalender.SelectionStart.Date 
    'run the following sub 
    FilterBooking(selDate) 
End Sub 

Фильтр я создал, когда отлаживается дает сообщение об ошибке ...

An unhandled exception of type 'System.FormatException' occurred in mscorlib.dll

Additional information: String was not recognized as a valid DateTime.

Может кто-то показать мне, где им совершить ошибку.

PS Я также попробовал этот фильтр =

Me.QueryBookingInfoBindingSource.Filter = "BookingDate >= #" & dateFrom.ToString("dd/MM/yyyy hh:mm:ss") & "# AND BookingDate <= #" & dateTo.ToString("dd/MM/yyyy hh:mm:ss") & "#" 
+0

Какой источник данных вы используете? – Crono

+0

база данных с локальным хранением –

+0

Нет. Я имею в виду код вызывающего кода. Это DataSet? Объекты объекта? POCO которые? – Crono

ответ

2

Вы пробовали форматирования ваши даты?

Me.QueryBookingInfoBindingSource.Filter = "BookingDate >= " & String.Format("#{0:yyyy/MM/dd HH:mm:ss}#", dateFrom) & " AND BookingDate <= " & String.Format("#{0:yyyy/MM/dd HH:mm:ss}#", dateTo) 

EDIT:

Это ИМХО чище и легче читать:

Public Sub FilterBooking(selDate) 
    Dim dateFrom As DateTime = selDate.Date 
    Dim dateTo As DateTime = dateFrom.AddDays(1).Subtract(New TimeSpan(1)) 

    Dim filterBuilder As New StringBuilder() 
    Dim filterFormat As String = "BookingDate {0} #{1:yyyy/MM/dd HH:mm:ss}#" 

    With filterBuilder 
     .AppendFormat(filterFormat, ">=", dateFrom) 
     .Append(" AND ") 
     .AppendFormat(filterFormat, "<=", dateTo) 
    End With 

    Me.QueryBookingInfoBindingSource.Filter = filterBuilder.ToString() 
End Sub 

Это также будет иметь возможность получить даты со значениями времени без сбоев, какой ваш прежний код Wouldn «т. ;) При этом, поскольку selDate объявлен вне метода, вы, вероятно, не хотите, чтобы начинался параметризованный метод.

+0

получить эту ошибку, когда я использую этот код ... Необработанное исключение типа «System.Data.SyntaxErrorException» произошло в System.Data.dll Дополнительная информация: Ошибка синтаксиса: Отсутствует операнд после Оператор 00. –

+0

Только что отредактировал мой ответ. – Crono

+0

Я добавил # до и после каждой даты, а затем вернулся к исходной ошибке. –