Вычисляемые ячейки в GridGroupFooterItem Telerik RadGrid
Вопрос
Я заполняю Telerik RadGrid данными из DataTable (System.Data.DataTable
).Поскольку я поддерживаю чужое приложение, я не могу использовать какой-либо другой источник данных или элемент управления отображением.
В моей сетке у меня есть три столбца:скажем, это произведенные виджеты (столбец A), ошибочные виджеты (столбец B) и доля дефектов (столбец C).Запрос к базе данных предоставляет мне их и выполняет расчет C = B/A.
У меня есть строка итогов (Telerik GridFooterItem
) внизу сетки.В столбцах A и B Telerik подсчитывает для меня итоговые суммы по этим столбцам.Мы не можем вычислить правильное значение «итого» столбца C только на основе столбца C:мы должны заполнить его (суммой B) / (суммой A).
Мне удалось сделать это, обработав DataBound
событие RadGrid и вручную заполнив ячейки нижнего колонтитула.(мне нужно было поймать GridFooterItem
в ItemCreated
событие, затем поместите в него значения в DataBound
событие, после того как оно автоматически подсчитало для меня итоговые суммы для A и B.) Это выглядит довольно хаотично - может быть, есть лучший способ...?
В любом случае, важный момент заключается в следующем:
Моя сетка разделена на группы, поэтому мне также нужно заполнить столбец C в GridGroupFooterItem
с.В этом случае я не могу заставить свою хакерскую технику работать:Я нахожу нужную ячейку нижнего колонтитула myGridFooterItem["WidgetsProduced"]
, но я не могу получить ячейки нижнего колонтитула группы с помощью myGridGroupFooterItem["WidgetsProduced"]
- это просто не словарь.
Я пробовал использовать myGridGroupFooterItem.Cells[]
, но это TableCellCollection
содержит на пару ячеек больше, чем я ожидал, поэтому доступ к ним по целочисленному индексу кажется немного затруднительным (тем более, что это пользовательский отчет, поэтому столбцы могут быть в любом порядке).
Так:как мне заполнить эти ячейки своими расчетами?
Решение
событие, связанное с данными вашего элемента, выглядит примерно так:
grd_ItemDataBound(object sender,GridItemEventArgs e)
{
//catch the footer element
if(e.Item.ItemType==GridItemType.GroupFooter)
{
(e.Item.FindControl("yourTextBox") as TextBox).Text = your calculated value
}
}
Другие советы
Я дважды проверил, работает ли индексатор уникальных имен с версией RadGrid для ASP.NET AJAX за второй квартал 2009 и третий квартал 2009 года, и он работал на моей машине.Проверьте свою версию и попросите дополнительную помощь, используя Форумы Телерика если нужно.
хуй
Попробуй это
На странице Aspx:
<telerik:GridBoundColumn Aggregate="Sum" DataField="Price" DataFormatString="{0:C}" EmptyDataText="0" FooterText="Total :" HeaderText="Price" UniqueName="Price"> ...
(Или)
В коде за страницей:
Private Sub RadGrid1_ItemDataBound(ByVal sender As Object, ByVal e As Telerik.Web.UI.GridItemEventArgs) Handles RadGrid1.ItemDataBound
Dim Item As GridDataItem
Dim value as Double
Select Case (e.Item.ItemType)
Case Telerik.Web.UI.GridItemType.AlternatingItem, Telerik.Web.UI.GridItemType.EditItem,Telerik.Web.UI.GridItemType.Item,Telerik.Web.UI.GridItemType.SelectedItem
Item = e.Item
'------ Calculate Total amount -----------
Item("TotalPayment").Text = CDbl(Item("TotalPayment").Text)
value += CDec(Item("TotalPayment").Text)
Case Telerik.Web.UI.GridItemType.Footer
'------ Display the total amount in Footer ------
Dim footerItem As GridFooterItem = e.Item
If Not RadGrid1.Items.Count = 0 Then footerItem("TotalPayment").Text = "Total :" + value
End Select
End Sub
Что ж, если вы используете собственную формулу для расчета результатов вместо стандартных агрегатов, таких как сумма, среднее значение и т. д., вам, вероятно, придется полагаться на свою собственную логику.Ячейки нижних колонтитулов группы должны индексироваться по уникальному имени — я помню, что это не поддерживалось в предыдущих версиях Telerik ASP.NET Grid, но было добавлено в более поздних версиях — во втором или третьем квартале 2009 года.
хуй