Как использовать 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

Фильтр, который я создал при отладке, выдает это сообщение об ошибке...

Произошло необработанное исключение типа «System.FormatException» в mscorlib.dll.

Дополнительная информация: строка не была распознана как допустимый DateTime.

Может кто-нибудь показать мне, где я делаю ошибку.

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

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

person Funkster Phillip Watkins    schedule 18.02.2014    source источник
comment
Какой источник данных вы используете?   -  person Crono    schedule 18.02.2014
comment
локально хранимая база данных доступа   -  person Funkster Phillip Watkins    schedule 18.02.2014
comment
Нет, я имею в виду на стороне кода вызова. Это набор данных? Сущностные объекты? POCO?   -  person Crono    schedule 18.02.2014
comment
о да, это набор данных, который я использую   -  person Funkster Phillip Watkins    schedule 18.02.2014


Ответы (1)


Вы пробовали форматировать даты?

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)

ИЗМЕНИТЬ:

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

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

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

person Crono    schedule 18.02.2014
comment
получить эту ошибку, когда я использую этот код... Необработанное исключение типа «System.Data.SyntaxErrorException» произошло в System.Data.dll Дополнительная информация: Синтаксическая ошибка: Отсутствует операнд после оператора «00». - person Funkster Phillip Watkins; 18.02.2014
comment
Еще раз отредактировал. Теперь, зная, что это набор данных, это должно сделать это. - person Crono; 18.02.2014
comment
моя ошибка... Спасибо, что сделали это!! - person Funkster Phillip Watkins; 18.02.2014
comment
Рад, что смог помочь. :) Пожалуйста, имейте в виду: ваш текущий фильтр будет отфильтровывать даты со временем, установленным на 00:00:00. Будьте уверены, что это то, что вы хотите. Кроме того, вместо того, чтобы объединять значение времени в виде строки, рассмотрите возможность добавления интервалов времени до дат. - person Crono; 18.02.2014
comment
Если бы вы настраивали этот запрос для получения всех бронирований с определенной даты, как бы вы его настроили? - person Funkster Phillip Watkins; 18.02.2014
comment
Очень хорошо. Спасибо, что поделились этим со мной, это очень ценно!! - person Funkster Phillip Watkins; 19.02.2014