EM_Y Ответов: 1

Как отфильтровать datagridview между двумя datetimepicker ?


Я хочу отфильтровать datagridview между двумя datetimepicker.
Я использую c# и MySQL .

Что я уже пробовал:

private void ShowButton (object sender, EventArgs e)
      {
          String constring ="datasource=;port=;username;password=";
          using (var conn = new MySqlConnection(constring))
          {

                      BindingSource bs = new BindingSource();

                      bs.DataSource = dataGridView1.DataSource;

                      bs.Filter = "Convert(Date,'System.String') Between  '%" + dateTimePicker1.Text + "%' AND '%" + dateTimePicker2.Text + "%'  ";
            dataGridView1.DataSource = bs;
          }

     }

		    
                    

CHill60

Почему бы не отфильтровать его перед заполнением dataGridView? Какой запрос вы используете для заполнения DGV?

EM_Y

Я обновил его, и теперь вы можете это увидеть !
Я надеюсь, что это более ясно !
это кнопка Показать

CHill60

Я спросил: "какой запрос вы используете для заполнения DGV". Эта кнопка использует существующий источник данных для DGV. Как было тот источник данных заполнен?
Используйте  Ответить  кнопка при ответе, чтобы плакаты были уведомлены о вашем ответе

EM_Y

Извините за мой промах, но я использовал задачи Datagridview для выбора источника данных !!и он заполняет свои данные автоматически.

1 Ответов

Рейтинг:
11

Richard Deeming

Ваш фильтр должен соответствовать синтаксису, описанному в примечаниях к DataColumn.Expression собственность:
Свойство выражения / Microsoft Docs[^]

Попробуй:

bs.Filter = string.Format("Date Between #{0:yyyy/MM/dd}# And #{1:yyyy/MM/dd}#", dateTimePicker1.Value, dateTimePicker2.Value);


EM_Y

Спасибо, но я попробовал ваш код, и он показал мне это сообщение об ошибке "выражение содержит неподдерживаемый оператор "между". !

Richard Deeming

Ну, согласно документации, это должно быть поддержано.

Попробуйте использовать >= и <= вместо:

bs.Filter = string.Format("Date >= #{0:yyyy/MM/dd}# And Date <= #{1:yyyy/MM/dd}#", dateTimePicker1.Value, dateTimePicker2.Value);

EM_Y

Я попробовал это сделать, и сообщение об ошибке изменилось на "столбец" дата "не известен"!

Richard Deeming

Поэтому измените фильтр, чтобы указать правильное имя столбца!

bs.Filter = string.Format("YOUR_COLUMN_NAME_HERE >= #{0:yyyy/MM/dd}# And YOUR_COLUMN_NAME_HERE <= #{1:yyyy/MM/dd}#", dateTimePicker1.Value, dateTimePicker2.Value);

EM_Y

Это работает, я очень благодарен .