Вычисляемые ячейки в GridGroupFooterItem Telerik RadGrid - PullRequest
1 голос
/ 17 декабря 2009

Я заполняю 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 s. Я не могу заставить мою хакерскую технику работать в этом случае: я нахожу нужную ячейку нижнего колонтитула с помощью myGridFooterItem["WidgetsProduced"], но я не могу получить ячейки нижнего колонтитула группы с помощью myGridGroupFooterItem["WidgetsProduced"] - это просто не словарь .

Я пытался использовать myGridGroupFooterItem.Cells[], но этот TableCellCollection содержит на пару ячеек больше, чем я ожидал, поэтому доступ к ним по целочисленному индексу выглядит немного странно (особенно если это отчет, определенный пользователем, поэтому столбцы могут быть в любом порядке).

Итак: как мне заполнить эти ячейки моим расчетом?

Ответы [ 4 ]

1 голос
/ 29 октября 2011

Попробуйте это

На странице 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
1 голос
/ 17 декабря 2009

событие с привязкой к данным вашего предмета выглядит как

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
}


}
1 голос
/ 05 января 2010

Я дважды проверил, работает ли уникальный индексатор имен с версиями RadGrid для ASP.NET AJAX Q2 2009 и Q3 2009 и работал ли он на моей машине. Проверьте свою версию и обратитесь за дополнительной помощью, используя форумы Telerik , если это необходимо.

Dick

0 голосов
/ 17 декабря 2009

Что ж, если вы используете пользовательскую формулу для вычисления результатов вместо стандартных агрегатов, таких как сумма, среднее и т. Д., Вам, вероятно, придется полагаться на собственную логику. Ячейки из нижних колонтитулов группы должны индексироваться по уникальному имени - я помню, это не поддерживалось в предыдущих версиях Telerik ASP.NET Grid, но было добавлено в более поздних версиях - Q2 или Q3 2009.

Дик

...