![]() |
|
Модераторы: gambit |
![]()
|
|
| ViterAlex |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 7.10.2009 Где: Харьков Репутация: нет Всего: 7 |
Есть DataTable, у которой два поля (StartTime и StopTime) имеют формат System.DateTime. Прекрасно отображаются в DataGridView. Нужно сделать ещё одно поле, которое бы отображало разницу между этими двумя полями. Я так понимаю, что поле должно быть System.TimeSpan, но как в него записывать значения? Очень бы хотелось это делать автоматически, через Expression
Пробовал при создании поля записывать так:
Если StopTime пустое, то ошибок нет (какие могут быть ошибки?
Как быть? P.S. Пишу пока что на VB.Net |
||||
|
|||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Привет!
Ух не силён я в VB. Попробуй так, это стандартный способ. Это на C# но на VB по аналогии, обекты ведь одинаковые. ![]() В твоем случае видимо тип Time или как он там называеться, и StopTime - StartTime видимо.И он для каждой строки по идее должен прогнать. -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| ViterAlex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 7.10.2009 Где: Харьков Репутация: нет Всего: 7 |
Понимаешь, для обычных чисел считает без вопросов. У меня есть в таблице такой столбец-выражение для Double, но именно для даты, вернее для разности дат, не хочет. Попробуй сделать для дат, может у тебя получится.
|
|||
|
||||
| KuMa1104 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 541 Регистрация: 16.4.2009 Где: Ростов-на-Дону Репутация: 1 Всего: 3 |
Попробовал тоже вылетает оно.
Почитал сдесь http://www.sql.ru/forum/actualthread.aspx?tid=662554 наверное прийдёться, заполнять уже после пробегаясь по каждой строке. Но если получиться по другому то напиши, аж самому интересно)) -------------------- Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце. Время - штука относительная... а время обеда - ещё более относительная |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
предлагаю такой подход - отображение времени - это функция клиента. конкретнее - хранить метку времени в БД , как длинное целое (тот же UTC) и уже собственно работать именно с ним. покажу на примере:
бесспорно это не оптимальный вариант. писал на скорую руку. но тем не менее он подчеркивает мою мысль. |
|||
|
||||
| ViterAlex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 7.10.2009 Где: Харьков Репутация: нет Всего: 7 |
mrbrooks, ты прав. Всё получилось.
А как, вернее, когда правильно форматировать выводимые значения? Я делаю это в CellFormating. Может есть другой метод? |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
||||
|
||||
| advantiss1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 16.12.2009 Репутация: нет Всего: нет |
К сожалению DataColumn.Expression имеет очень ограниченный список поддерживаемых функций, к тому же сделать для него extensible метод проблематично.
Как вариант - выполнять расчет в обработчиках событий DataTable.ColumnChanged, DataTable.RowChanged. Это позволит не извращать формат хранения данных в БД под данный кусочек логики. |
|||
|
||||
| ViterAlex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 7.10.2009 Где: Харьков Репутация: нет Всего: 7 |
А почему извращать? Всё наоборот, очень логично. Храним число, делаем с ним, что нужно, а когда нужно его показать, то форматируем.
|
|||
|
||||
| advantiss1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 16.12.2009 Репутация: нет Всего: нет |
Дело в том, что потом придется выполнять преобразование данных при каждом обращении к ним, как в SQL запросах так и в логике. Для того и выделены различные типы данных, чтоб было удобно ими пользоваться разработчику. В данном случае хранение даты в формате числа является решением одной локальной проблемы(что есть хак в чистом виде), влекущей за собой глобальные последствия |
|||
|
||||
| mrbrooks |
|
||||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 5 Всего: 306 |
При чем здесь SQL? Данные пересчитывает клиент при отображении/записи. Этим приемом пользуются в частности производители промышленных девайсов. К примеру если брать устройства по архиву данных - в них время хранится всегда как длинное целое в UTC.
Чем богаты, тому и рады. |
||||
|
|||||
| advantiss1 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 16.12.2009 Репутация: нет Всего: нет |
к примеру: вместо
прийдется писать
или
также очевидно что CAST добавляет лишней работы серверу БД, что для выборок на больших обьемах данных, будет давать "прирост" во времени выполнения запроса Но в конце концов, соглашусь, вариант хранения даты в виде числа можно принять как одно из решений проблемы, дело вкуса. Это сообщение отредактировал(а) advantiss1 - 17.12.2009, 15:14 |
||||||
|
|||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |