none
Фильтр DataGridView для типа данных System.TimeSpan

    Вопрос

  • Доброго времени суток.

    Проблема с фильтрацией по типу данных System.TimeSpan в datatable через datagridview.
    Если  хочу найти время, например "01:02:03", то результаты поиска показывают ноль строк.

    Если ввожу например "1", то результаты поиска показывают строки где по отдельности в
    поле hh,mm, или ss присутствуют символ "1".
    Результат поиска по "1":
    01:22:38
    02:05:14
    02:05:41
    02:04:01
    02:10:01
    02:10:19
    02:10:13
    02:11:45

    Похоже что фильтрация выполняется отдельно
    по часам, минутам или секундам, а символ ":" не обрабатывается.


    Часть кода С#:

    if (ArrayFieldNumberTemplate3[counter11 + 1] == "time")
        ArrayFieldNumberTemplate3[counter11 + 1] = "TimeSpan";
    dataTable.Columns.Add(new System.Data.DataColumn(ArrayFieldNumberTemplate3[counter11], System.Type.GetType("System."+ ArrayFieldNumberTemplate3[counter11+1])));


    bindingSource1.DataSource = dataTable;
    dataGridView1.DataSource = bindingSource1;

    bindingSource1.Filter = string.Format(["+ FilterComboBox.Text + "],'System.String') LIKE '%{0}%'", toolStripTextBox1.Text);
    или
    bindingSource1.Filter = "Convert (["+ FilterComboBox.Text + "],'System.String') LIKE '%" + toolStripTextBox1.Text + "%'";


    Если объявляю столбец в таблице как System.String то фильтрация выполняется правильно.

Ответы

Все ответы

  • Нашёл вот как нужно делать фильтр:

    Например чтобы найти 05:57:37 и 05:58:02

    нужно ввести

    PT5H57M53S 05:57:53

    PT5H58M2S 05:58:02


  • EnumerableRowCollection<DataRow> querySelect = null;

    querySelect = from timespan in dataTable.AsEnumerable()

                                where timespan.Field<TimeSpan?>(FindComboBox.Text) >

                               new TimeSpan(int.Parse(H), int.Parse(M), int.Parse(S))
                                select timespan;

                    DataView view = querySelect.AsDataView();
                    bindingSource1.DataSource = view;

    При наличии символа "?" в <TimeSpan?>, не возникнет исключения, если есть значения DBNull.Value.


    • Изменено Y_VS 9 мая 2019 г. 21:35