GridView Layout / Output - PullRequest
       8

GridView Layout / Output

0 голосов
/ 16 марта 2009

У меня есть веб-сайт, использующий ASP.Net 2.0 с SQL Server в качестве базы данных и C # 2005 в качестве языка программирования. На одной из страниц у меня есть GridView со следующим макетом.

Date -> Time -> QtyUsed

Ниже приведены примеры значений: (Поскольку этот GridView / отчет создается только для определенного месяца, я извлек и отображаю только часть дня в день, игнорируя часть месяца и года.

01 -> 09:00 AM -> 05 
01 -> 09:30 AM -> 03
01 -> 10:00 AM -> 09
02 -> 09:00 AM -> 10
02 -> 09:30 AM -> 09
02 -> 10:00 AM -> 11
03 -> 09:00 AM -> 08
03 -> 09:30 AM -> 09
03 -> 10:00 AM -> 12

Теперь пользователь хочет, чтобы макет был таким:

Time        01 02 03 04 05 06 07 08 09 
-------------------------------------------------------------------------
09:00 AM -> 05 10 08
09:30 AM -> 03 09 09
10:00 AM -> 09 11 12

Основным требованием является то, что дни должны быть в заголовке столбца с 01 до последней даты (причина, по которой я извлек только часть дня из даты). Временные интервалы должны быть в виде строк.

Из моего опыта работы с Excel мне пришла в голову идея Transpose, но я не уверен.

Пожалуйста, помогите мне в решении этой проблемы.

Спасибо.

Лалит Кумар Барик

Ответы [ 2 ]

2 голосов
/ 16 марта 2009

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

0 голосов
/ 16 марта 2009

В SQL Server есть функция PIVOT, которая может быть полезна.

В статье MSDN указано использование и приведен пример.

Пример выглядит следующим образом

Таблица DailyIncome выглядит как

VendorId   IncomeDay  IncomeAmount
---------- ---------- ------------
SPIKE      FRI        100
SPIKE      MON        300
FREDS      SUN        400
SPIKE      WED        500
...

Показать

VendorId   MON         TUE         WED         THU         FRI         SAT         SUN

---------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
FREDS      500         350         500         800         900         500         400
JOHNS      300         600         900         800         300         800         600
SPIKE      600         150         500         300         200         100         400

Используйте этот выбор

SELECT * FROM DailyIncome
PIVOT( AVG( IncomeAmount ) 
FOR IncomeDay IN
 ([MON],[TUE],[WED],[THU],[FRI],[SAT],[SUN])) AS AvgIncomePerDay

В качестве альтернативы, вы можете выбрать все данные из DailyIncome и построить DataTable с поворотными данными. Вот пример.

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