Необходимо добавить «свертку» всего набора данных в нижней части DataGrid, который разбит на страницы - PullRequest
0 голосов
/ 09 октября 2009

В ASP.NET 3.5 у меня есть сетка данных, связанная с чем-то динамическим. Для создания таблицы данных берут три разные таблицы, возвращенные из набора данных, и объединяют их для создания одной таблицы.

Это так. Первая таблица данных возвращает список столбцов, которые будут в окончательной таблице данных. Вторая таблица данных возвращает список людей, их идентификационный номер, информацию о состоянии и общую сумму, которая указана в конце строки в финальной таблице. Третья таблица возвращает список значений для данного типа, который соответствует идентификатору человека и столбцу из первой.

Пример

Table1
ProdID ProdName
1 виджеты
2 вещи
... ...

Таблица 2
PersonID PersonName
103 Джон Смит
105 Тим Доу
... ...

Таблица 3
PersonID ProdID Сумма
103 1 205,00
103 2 234,00
105 1 150,00
105 2 189,00

Результирующая таблица становится
PersonName ProdName Сумма
Виджеты Джона Смита 205.00
Материал Джона Смита 234.00
Виджеты Тима Доу 150,00
Тим Доу Материал 189.00

Мне удалось написать словарь, который суммирует каждый столбец по имени, но я хочу показать сумму в нижнем колонтитуле таблицы данных, с которой связана конечная таблица.

Таким образом, сумма под виджетами должна быть 355, а сумма под материалами - 423. Проблема в том, что я не могу понять, как поместить эти значения в нижний колонтитул. Я пробовал OnDataBinding для сетки, но так как нижний колонтитул не связан, то он никогда не останавливается там. Я не знаю, смогу ли я "свернуть" созданную таблицу.

Есть идеи?

Ответы [ 4 ]

1 голос
/ 09 октября 2009

Нечто подобное в коде позади будет работать. Вам нужно изменить индексы ячеек, имя DataTable и т. Д., Но это, по сути, способ добавления суммы в нижний колонтитул.

GridView1.FooterRow.Cells[4].Text = string.Format("{0:C}", myDataTable.Compute( "sum(Net_Price)", ""));

Также необходимо установить для свойства DataGrid «ShowFooter» значение «True».

Полная статья здесь: http://programming.top54u.com/post/ASP-Net-DataTable-Compute-Column-Sum-using-C-sharp.aspx

1 голос
/ 09 октября 2009

Так что из того, что я понимаю здесь, вы хотите получить промежуточный итог для каждой группировки на основе названия продукта.

Если вы знаете, что такое имена столбцов, вы можете использовать LINQ для группировки результатов, чтобы получить агрегат, а затем, если вы хотите, чтобы они были вставлены как последняя запись, просто вставьте их в DS после выполнения запроса.

0 голосов
/ 09 октября 2009

Мне удалось решить проблему. Я понял, так как список продуктов может быть динамическим, у меня нет BoundColumns в коде HTML / ASPX. Я должен был создать их программно. При их создании я проверяю заголовок для столбца. Если заголовок существовал в моем словаре в качестве ключа, я возвращал значение (которое было суммой) и устанавливал его как значение столбца FooterText.

Спасибо за все предложения, хотя!

0 голосов
/ 09 октября 2009

Как насчет того, чтобы написать еще один SQL-запрос, используя группировку, тогда вы можете получить итоговые значения для каждой подгруппы, которые вы можете выделить, чтобы легко изолировать. Затем проанализируйте каждую строку набора результатов запроса и создайте строку. Со строкой, которую вы строите, она будет легко вставлена ​​в любой столбец нижнего колонтитула.

...