Фильтрация ObjectDataSource по дате / времени в SPGridView - PullRequest
2 голосов
/ 05 октября 2010

Я почесываю голову на этом ... У меня есть столбцы даты / времени, которые я хочу отсортировать по дате / времени, но при фильтрации только фильтрует по части даты даты / времени.Мой код фильтра (лямбда, содержащаяся в методе установки) выглядит следующим образом:

        this.taskGrid.AllowFiltering = true;
        this.odsGrid.Filtering += (sender, e) =>
        {
            var odsv = (ObjectDataSourceView)sender;
            var filterExp = odsv.FilterExpression;

            if (filterExp.Contains("Date")
                || filterExp.Contains("Deadline")
                || filterExp.Contains("Client Proof"))
            {
                var fieldAndVal = filterExp.Split('=');
                DateTime date;

                if (DateTime.TryParse(fieldAndVal[1].Replace("'", string.Empty), out date))
                {
                    odsv.FilterExpression = "("
                        + fieldAndVal[0] + " >= '" + date
                        + "') AND ("
                        + fieldAndVal[0] + " < '" + date.AddDays(1) + "')";
                }
            }

            this.ViewState["FilterExpression"] = odsv.FilterExpression;
        };

Таким образом, это меняет выражение, которое выглядит как "[Client Proof] = '8/5/2010 4:24:44 PM '"и переписывает его как" ([Проверка клиента]> =' 8/5/2010 ') И ([Проверка клиента] <' 8/6/2010 ') ". </p>

Теперь вот кикер, он работает в моей среде разработки (32-битная Win2K3, MOSS 2K7), но как только я продвигаю решение в среду QC (64-битная Win2K8R2, MOSS 2K7), выполнение того же фильтра приводит к пустойgrid. У кого-нибудь есть идеи?Или хороший способ увидеть, что на самом деле происходит при применении фильтра?Спасибо!

ETA:

Как выясняется, к моменту получения события Filtering формат фильтра [{1}] = '{0}' уже применен и все такоеЯ ничего не делаю.Предыдущие разработчики рассматривали дату как строку и использовали LIKE, которая работала нормально, но тогда сортировка была чокнутой.Таким образом, сортировка по дате / времени и фильтрация как строка были бы тем, что я хотел бы, но, кажется, не могу соединить их вместе.

1 Ответ

1 голос
/ 07 октября 2010

Я думал о чем-то через некоторое время.Не могли бы вы создать новый столбец, который содержит только часть даты из полного столбца DateTime?Затем вы примените фильтр к столбцу, который содержит только часть даты.

Вы можете попробовать установить BoundField.DataField для вашего столбца DateOnly.

PS Не уверен, почему он работаетодна среда, а не в другой.Я предполагаю, что проблема с данными / разница.

...