1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 12
1

DataGridView — фильтрация по датам

13.02.2017, 02:34. Показов 3252. Ответов 15

Author24 — интернет-сервис помощи студентам
Доброго времени суток всем. Товарищи, прошу помощи, мозг кипит и прочее...

Есть база в access. Там некоторые события по датам. отображается так:
DataGridView — фильтрация по датам


Есть форма, в которую происходит выгрузка из базы в dataviewgrid
DataGridView — фильтрация по датам


На форме есть 2 DateTimePicker (Date_From и Date_To)
Название: 2.JPG
Просмотров: 239

Размер: 10.1 Кб

в коде пишу:
VB.NET
1
2
3
4
Dim str_date_from As String = Date_From.Value.Date
Dim str_date_to As String = Date_To.Value.Date
 
tmpStr = "SELECT * FROM [main_base] WHERE [Дата] BETWEEN ('" & str_date_from & "') AND ('" & str_date_to & "')"
и далее запрос к базе...

не дает, не делает, не запускает.
Наверно, где-то на форуме есть похожая тема, но схожие посмотрел, опробовал, не помогает.
Хелп!!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2017, 02:34
Ответы с готовыми решениями:

Фильтрация данных в DatagridView
Нужно реализовать в Datagridview возможность, по необходимости фильтровать в моем случае "Заявки"...

Фильтрация в DataGridView не срабатывает
ass = textbox.text .... Me.ПерсоналTableAdapter.Fill(Me.КушнаренковоТВDataSet.Персонал) ...

Фильтрация в datagridview по нескольким критериям
Кто-нибудь знает как осуществить фильтрацию не по одному критерию а по нескольким? например у...

Фильтрация данных в DataGridView по дате
Необходимо, что бы при нажатии на btn происходила фильтрация данных по дате указанной в textbox....

15
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
13.02.2017, 07:32 2
Цитата Сообщение от prokudinsk Посмотреть сообщение
не дает, не делает, не запускает.
Для начала уберите скобки в запросе - значения диапазона BETWEEN в скобки не ставят.
BETWEEN MSDN
Можете весь фильтр в скобки поместить , но в данном контексте это лишнее.
Далее : проверьте все сравниваемые типы данных - они должны быть одинаковые.
Есть у меня подозрение , что [Дата] в запросе имеет типе date ( во всяком случае приведение
этого поля к строке не вижу) , а диапазон , с которым сравниваете , задаёте в строковом формате.
Так же проверьте , что возвращаемые форматы дат совпадают (день-месяц-год).
Так же для тестирования диапазон можно прописать по другому и , при необходимости,проверять,
разложив запрос на составляющие :
SQL
1
"SELECT * FROM [main_base] WHERE [Дата] >= '" & str_date_from & "' AND [Дата]<= '" & str_date_to & "'"
0
53 / 53 / 17
Регистрация: 12.02.2017
Сообщений: 261
13.02.2017, 08:02 3
Цитата Сообщение от prokudinsk Посмотреть сообщение
На форме есть 2 DateTimePicker (Date_From и Date_To)
попробуйте DataView
0
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
13.02.2017, 08:30 4
Цитата Сообщение от Navthe Посмотреть сообщение
попробуйте DataView
Зачем ? Что принципиально изменится, если фильтр по диапазону не работает ?
DataView ровно так же не будет заполняться... или вы предлагаете "тащить" весь массив данных ,
чтобы потом его уже фильтровать во вьюшке ? А если этих данных гигабайты ? Никаких ресурсов не хватит ))
Вопрос то не в форме предоставления , а в содержании - заставить фильтр работать.
0
53 / 53 / 17
Регистрация: 12.02.2017
Сообщений: 261
13.02.2017, 09:30 5
тогда BindingSource для сортировки таблицы, без перебора данных, вот пример

Создаешь объект BindingSource с его помощью можно сортировать таблицу по любым значениям , потом создаешь DateTimePicker и задаешь дату фильрации.

VB.NET
1
2
3
Private Sub DateTimePicker2_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateTimePicker2.ValueChanged
        BindingSource.Filter = "Date >= '" & DateTimePicker1.Text & "' AND Date <= '" & DateTimePicker2.Text & "'"
End Sub
0
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
13.02.2017, 19:24 6
Цитата Сообщение от Kulma Посмотреть сообщение
разложив запрос на составляющие
Из своей практики хочу заметить, что разложение запросов, равно как и использование запросов в формате, приведенным автором топика, в большинстве случаев является небезопасным и иногда совершенно (на первый взгляд) непредсказуемым.

Рекомендую вам использовать строго типизованные запросы (с параметром/параметрами). А еще лучше использовать хранимую процедуру с параметрами, также с проверкой типов. В моем случае все вопросы касаемо чудесного преобразования дат операционной системой были решены.

Добавлено через 2 минуты
Вот пример из MSDN
0
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
13.02.2017, 20:00 7
"Папа , а ты сейчас с кем разговаривал ?" (с)

А если серьёзно :
Цитата Сообщение от Winney Посмотреть сообщение
Из своей практики хочу заметить, что разложение запросов, равно как и использование запросов в формате, приведенным автором топика, в большинстве случаев является небезопасным и иногда совершенно (на первый взгляд) непредсказуемым.
во-первых , вопрос ТС прозвучал по совершенно конкретной теме - неработающий фильтр
во-вторых, если вы внимательно прочтёте мой ответ , то там есть ключевые слова , которые вы пропустили
Цитата Сообщение от Kulma Посмотреть сообщение
Так же для тестирования диапазон можно прописать по другому и , при необходимости,проверять,
.
в-третьих, я знаю десятки проектов , которые себя отлично чувствуют без параметров и процедур и аргументы
в их пользу ничуть не менее веские , чем ваши , начиная от переносимости проекта между платформами и
заканчивая целесообразностью и уязвимостями.
По сему ,мне думается , холивар на эту тему - занятие достаточно бессмысленное и бестолковое .
Каждый использует те инструменты , которые ему ближе.

Цитата Сообщение от Winney Посмотреть сообщение
В моем случае все вопросы касаемо чудесного преобразования дат операционной системой были решены.
Ну так прекрасно , продемонстрировали бы ТС правильный код . )))
0
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
13.02.2017, 20:08 8
Kulma, я не подвергал сомнениям ваше решение) Просто добавил свои мысли на этот счет, что не отменяет изложенного вами)

Цитата Сообщение от Kulma Посмотреть сообщение
Ну так прекрасно , продемонстрировали бы ТС правильный код . )))
Не даю рыбу, даю удочку и объясняю как ловить)

За
Цитата Сообщение от Kulma Посмотреть сообщение
"Папа , а ты сейчас с кем разговаривал ?" (с)
+100500)))
0
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
13.02.2017, 20:25 9
Цитата Сообщение от Winney Посмотреть сообщение
Не даю рыбу, даю удочку и объясняю как ловить)
Ну и напрасно, кстати.
Зачастую полезней дать рыбку , чтобы у перекусившего были силы , а главное желание,
брать в руки удочку . Глядишь через непродолжительное время не только себя,
но и окружающих накормит
Это ж форум , а не ярмарка тщеславия )))
1
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
13.02.2017, 20:33 10
Цитата Сообщение от Kulma Посмотреть сообщение
Зачастую полезней дать рыбку
И такое бывает, но после того как удочка не помогла)
0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 12
05.03.2017, 00:03  [ТС] 11
KULMA, Переделал немного.
VB.NET
1
2
3
 Dim str_date_from As Date = Date_From.Value.ToString("MM/dd/yyyy")
 Dim str_date_to As Date = Date_To.Value.ToString("MM/dd/yyyy")
 tmpStr = "SELECT * FROM [main_base] WHERE [Дата] >= '" & str_date_from & "' AND [Дата]<= '" & str_date_to & "'"
далее запрос...
скрины значений...
Миниатюры
DataGridView — фильтрация по датам   DataGridView — фильтрация по датам   DataGridView — фильтрация по датам  

0
258 / 199 / 49
Регистрация: 18.12.2015
Сообщений: 416
05.03.2017, 11:47 12
prokudinsk, что-то я не понимаю, изначально у вас видно, что дата в базе используется dd.mm.yyyy, теперь вы ее преобразовываете в формат en-US. Второй момент, в столбце "Дата" формат даты?
А по сути - SQL запрос в сообщении #2 рабочий, если текстовый формат.
Преобразуйте в строковые переменные, посмотрите что на выходе:
VB.NET
1
Dim str_date_to As String = Date_From.Value.ToString("dd/MM/yyyy")
0
307 / 248 / 40
Регистрация: 28.09.2013
Сообщений: 600
06.03.2017, 21:50 13
VB.NET
1
2
3
4
5
6
7
8
9
Dim _date_from As Date = Date_From.Value
 Dim _date_to As Date = Date_To.Value
 
 commandText= "SELECT * FROM [main_base] WHERE [Дата] between @date_from AND @date_to"
 
Dim command As New SqlCommand(commandText, connection)
command.Parameters.Add("@date_from ", SqlDbType.Date) ' Не могу проверить
command.Parameters("@date_from ").Value = _date_from 
' аналогично для @date_to
Столбец [ДАТА] в БД должен быть типа Date.
Дата - как сущность - не зависит от языка. а все mmddyy и прочие - всего лишь обличение этой сущности в удобоваримый пользователям вид.

Добавлено через 1 час 33 минуты
однако есть и такая тема
0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 12
11.03.2017, 13:04  [ТС] 14
Проблема решена! все работает, вот решение, если кому надо:

VB.NET
1
2
3
4
 Dim str_date_from As String = Date_From.Value.ToString("MM\/dd\/yyyy")
 Dim str_date_to As String = Date_To.Value.ToString("MM\/dd\/yyyy")
 
tmpStr = "SELECT * FROM main_base WHERE ([Дата] BETWEEN #" & str_date_from & "# AND #" & str_date_to & "#)"
Всем спасибо за участие.
1
0 / 0 / 0
Регистрация: 18.02.2017
Сообщений: 18
16.03.2017, 20:13 15
Я проверил этот код, однако он некорректно фильтрует по диапазону дат. Проставьте в поле "ДАТА" записи с разными месяцами и при диапазоне от 01.03 по сегодняшнюю дату высвечиваются все записи за 2 месяца. Если же в Access поле "ДАТА" тип Дата и время, то выдает ошибку. Я перепробовал все варианты, не получается ничего.
0
1 / 1 / 0
Регистрация: 15.12.2016
Сообщений: 12
21.03.2017, 01:37  [ТС] 16
Работает по разным диапазонам имеющихся в базе записей по датам.
0
21.03.2017, 01:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2017, 01:37
Помогаю со студенческими работами здесь

DataGridView и фильтрация данных. Как реализовать средствами VB.net?
Доброго времени суток, коллеги! На форме DataGridView с заполненными данными. Столбец 0 -...

Фильтрация в админке по датам
Сделал приложение Booking. Хочу сделать возможность фильтрации в админке списка заявок на...

Фильтрация по двум датам DateTimePicker
Есть БД SQL Server Надо осуществить фильтрацию по двум полям (датам: DateTimePicker1,...

Фильтр по датам в datagridview
В данный момент пишу программу на С#, имеется datagridview в котором есть записи, нужно сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru