Вопрос

Я заполняю 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 года.

хуй

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top