Страница: 1 | 2 |
Вопрос: формат времени до сотых долей секунд в DGV
Добавлено: 05.03.09 18:50
Автор вопроса:
aleha
Господа. может кто подскажет, а то я что-то запутался и в МСДН не могу нужного найти.
У меня в DatagridView падают значения из базы SQL по запросу, где одно поле имеет формат Time. И если встречаются доли секунд то он мне выводит число с кучей последующих нулей, как мне настроить формат столбца DGV, чтобы он выводил только первые 2 числа доли секунды:
т.е. в базе находится число 00:00:00.1000000 (в таком же виде оно выводится в датагридвиев), а мне надо чтобы в ДГВ отобразилось 00:00:00.1
попробовал поменять в самой базе длину символов после запятой до 2, а в ДГВ выводит всё равно все 7 цифр.
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа: BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #1
Добавлено: 06.03.09 02:57
Номер ответа: 2
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #2
Добавлено: 06.03.09 04:49
и как же ты там собрался DateTime округлять, когда Math.Round только Decimal и Double принимает?
Номер ответа: 3
Автор ответа: BG(Алексей)
Вопросов: 26
Ответов: 295
Профиль | | #3
Добавлено: 06.03.09 05:35
Недочитал.
Номер ответа: 4
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #4
Добавлено: 06.03.09 06:38
Тебе просто для этой колонки надо задать соответствующую строку форматирования и выводить данные в нужном формате. К примеру вот такой код:
 ateTime t = DateTime.Now;
Console.WriteLine(t.ToString("HH:mm:ss.ff");
выведет время с 2 знаками поле запятой.
Ты же наверняка выводишь данные через скриплет Eval, вот его приведи к типу DateTime(это обязательно надо сделать потому что он возвращает object) и дальше уже ToString с нужным тебе форматом.
Номер ответа: 5
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 06.03.09 06:40
(*ворчливо) блин.. ваши добаные смайлики.. ведь был же нормальный форум.. так нет же.. детство в одном месте заиграло.. смайликов нафтыкали
Номер ответа: 6
Автор ответа: aleha
Вопросов: 8
Ответов: 19
Профиль | | #6
Добавлено: 06.03.09 12:03
в самом SQL тип данных для данного столбца выбран - "Time", при заполнении DataTable SqlDataAdapterom тип столбца становится TimeSpan и соответственно при привязке DataGridView через DataSource этот столбец остаётся с типом TimeSpan. Весь вечер убил на попытку как-нибудь привести это к какому-нибудь форматированному виду или преобразовать во что-нибудь отличное от timespan и что-то не получилось. Странно что никак нельзя удалить эти последующие нули, да и вообще зачем он их выводит....
Может быть кто-нить попробовал бы эту цепочку с выводом данных из SQL в DataGridView и отписал бы пример с кодом?
Номер ответа: 7
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 06.03.09 13:39
да тут и пробовать нечего.. задача тривиальная.
1. Открываешь форму и выделяешь свой DataGridView
2. В Свойствах находишь Columns и тыкаешь туда (либо просто жмешь Edit Columns) - открывается диалог Edit Columns3. Слева выделяешь твой столбец в котором отображается время, а справа ищешь DefaultCellStyle и жмешь туда.. открывается диалог CellStyleBuilder
4. В этом диалоге находишь Format и вводишь туда HH:mm:ss.ff, если надо просто время то можешь набрать просто T либо там же ткнешь на кнопку и выберишь формат из списка
5. Наслаждаешься полученным результатом (это очень важно)
Номер ответа: 8
Автор ответа: aleha
Вопросов: 8
Ответов: 19
Профиль | | #8
Добавлено: 06.03.09 14:28
у меня DGV пустой изначально, колонки формируются после выгрузки данных из БД (там куча условий, так что колонки и данные могут быть каждый раз разные)
Пробовал уже после формирования данных делать через комманду: DataGridView.Columns(номер_колонки).DefaultCellStyle.Format = "T" или DataGridView.Columns(номер_колонки).DefaultCellStyle.Format = "HH:mm:ss.ff"
но ничего не изменятся, как выводилось "00:00:00.1000000" так и выводится.... вот и думаю что надо копать куда-глубже или где в другом месте смотреть
Номер ответа: 9
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 06.03.09 16:45
мда.. наступил ты брат на грабли... судя по документации TimeSpan не поддерживает toString("X"
, а это говорит о том, что мой да и твой способ работать не будут... Проще всего, если есть возможность то лучше всего изменить в БД тип этого поля.. если же нет, то придется извращаться
Номер ответа: 10
Автор ответа: aleha
Вопросов: 8
Ответов: 19
Профиль | | #10
Добавлено: 06.03.09 17:51
да к сожалению toString(format) не поддерживается timespan-ом, об этом я в курсе. А как извращаться? есть идеи?
Номер ответа: 11
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 06.03.09 18:10
ну первое что приходит в голову это
1.после привязки к данным изменить тип данных колонки
2.Подписаться на форматирование ячейки и привести строку к нужному виду
криво,конечно, но что то пока идей больше нету..
Номер ответа: 12
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #12
Добавлено: 06.03.09 18:13
либо через DataBindings что то мутить.. но это, по сути, такие же костыли.
Номер ответа: 13
Автор ответа: aleha
Вопросов: 8
Ответов: 19
Профиль | | #13
Добавлено: 06.03.09 22:17
спасибо за пример, я его в VB перевёл.
не очень то и криво, если в одну строчку, то вполне прямо))) вообще выгрузилось то что надо, убрал дни и часы и получил искомое, правда он мне 3 символа после запятой выводит независимо от того сколько я проставляю в параметре span.Milliseconds.ToString, видимо это уже какое-то ограничение может быть срабатывает.
а как можно не криво сделать?
Номер ответа: 14
Автор ответа: EROS
Вопросов: 58
Ответов: 4255
Профиль | | #14
Добавлено: 06.03.09 23:09
попробуй еще такой варинт..
Номер ответа: 15
Автор ответа: aleha
Вопросов: 8
Ответов: 19
Профиль | | #15
Добавлено: 07.03.09 12:29
в другом месте ещё подсмотрел вариант, получилось ещё короче, но в принципе смысл тот же:
за что они так ограничили timespan не понятно))