Фильтр DataGridView из datepicker - PullRequest
0 голосов
/ 27 мая 2020

У меня есть dataGrid (dataGridView1) в форме Windows. dataGridView1 заполняется из бизнес-объекта при загрузке формы. Это работает, как ожидалось:

bs.DataSource = oBadger_History.GetChild();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = bs;

У меня есть dateTimePicker (dateTimePicker1), а на dateTimePicker1_ValueChanged я хочу отфильтровать результаты dataGridView1, чтобы отображать результаты только для даты (v_issue_date), выбранной в dateTimePicker1. Я пробовал следующее (используя фильтр). .но не может заставить его работать. Может, поможет вторая пара глаз?

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "M/d/yyyy";
cs.DataSource = bs.Filter = string.Format("v_issue_date LIKE '{0}%' ",  dateTimePicker1.Text);

dataGridView1.DataSource = cs;
dataGridView1.Update();
dataGridView1.Refresh();

И имейте в виду, что я относительно новичок в c#. Я выполнил поиск (здесь и в Google), и хотя там была хорошая информация, она не имела прямого отношения к тому, чего я пытаюсь достичь.

В приведенном выше сценарии DataGridView1 выполняет refre sh, но refre sh не показывает примененный фильтр.

Просто чтобы исключить возможность несоответствия типа даты - я сделал очень простой фильтр - и все же DataGridView1 обновил sh, но не отобразил отфильтрованные данные.

BindingSource cs = new BindingSource();

cs.DataSource = dataGridView1.DataSource;
cs.Filter = "[v_firstname] = 'Jose'";
dataGridView1.DataSource = cs;
dataGridView1.Update();
dataGridView1.Refresh();

Эти неудачные попытки имитируют большинство примеров, которые я видел в Интернете. . поэтому я не уверен, почему фильтр не применяется.

РЕДАКТИРОВАТЬ - *********

Сохраняя это очень простым, я разместил загрузку и событие ниже :

private void ChildReport_Load(object sender, EventArgs e)
    {
        //BindingSource bs = new BindingSource();
        bs.DataSource = oBadger_History.GetChild();
        dataGridView1.AutoGenerateColumns = true;
        dataGridView1.DataSource = bs;
    }

    private void dateTimePicker1_ValueChanged_1(object sender, EventArgs e)
    {
        bs.Filter = string.Format("v_issue_date = '{0:yyyy/MM/dd}'", dateTimePicker1.Value);

        dataGridView1.DataSource = bs.Filter;
        dataGridView1.Update();
        dataGridView1.Refresh();
    }

В приведенном выше примере таблица обновляется, но всегда возвращается пустой. Совпадений не найдено. Не уверен, в чем проблема. v_issue_date - это поле типа даты. Я разместил остановки в отладке и могу проверить, что dateTimePicker.Value находится в таблице. Не уверен, почему я не могу найти совпадение.

Edit 2 **********

Это бизнес-объект, который я использую для заполнения DataGridView1.

public daBindingList<Badger_History> GetChild()
    {

        BadgerContext cn = (BadgerContext)this.context;
        var entityKist = cn.Badger_History.Where(b => b.v_child == "Child").ToList();
        this.EntityList = new daBindingList<Badger_History>(entityKist);
        return this.EntityList;

    }

1 Ответ

0 голосов
/ 04 июня 2020

Потратив слишком много времени на попытки заставить bs.Filter работать должным образом, я решил эту проблему, выбрав другое направление.

Потому что, как я ни старался, мне не удавалось удалить время из значения datetime. . . Я решил использовать дату больше и меньше даты.

DateTime StartDate = dateTimePicker1.Value.Date;
DateTime dt = new DateTime();
dt = Convert.ToDateTime(dateTimePicker1.Value.Date);
dt = dt.AddDays(0);
dt = dt.AddDays(1);

bs.DataSource = oBadger_History.EntityList.Where(a => a.v_child == "Child" && a.v_issue_date >= StartDate && a.v_issue_date <= dt);

dataGridView1.DataSource = bs;
dataGridView1.Refresh();

Это работает и удовлетворяет мои потребности. Я уверен, что есть способ получше, но у меня не хватило времени.

спасибо @JohnG за ваше терпение и помощь. Я действительно ценю ваши усилия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...