ASP.NET / Telerik Webforms:如何拦截和更改RadGrid中列的绑定值?

时间:2014-11-20 15:23:57

标签: asp.net gridview webforms telerik radgrid

我在整个Web应用程序中为多个Telerik RadGrid上的某些数据进行了一些自定义转换和格式设置。在使用Telerik之前,我使用了标准的ASP.NET GridView。要在使用GridView时进行自定义转换和格式设置,我从BoundField派生了一个新类,并覆盖了FormatDataValueGetValue方法。通过这种方式,我可以从绑定数据源拦截网格单元格的值,在网格看到它时更改值,并应用我的自定义格式设置规则。然后,只要我需要特定网格列的此功能,我就使用自定义BoundField

我没有看到任何方法让Telerik GridBoundColumn覆盖并拦截网格从绑定数据源获取数据的点(相当于GridView的BoundField.GetValue方法)。 我需要将Telerik网格中的单元格数据显示为所有函数的值B - 显示,排序,过滤,分组等 - 即使数据源中的相应数据是值A,我也无法更改无论如何都是基础数据源。

使用ASP.NET GridView的BoundField进行的代码片段:

public class MyBoundField
    : BoundField
{
    protected override string FormatDataValue(object dataValue, bool encode)
    {
        if ( someCondition )
        {
            return MyFormatFunction(dataValue, encode);
        }
        else
        {
            return base.FormatDataValue(dataValue, encode);
        }
    }

    protected override object GetValue(Control controlContainer)
    {
        // Get the data bound value.
        object boundValue = base.GetValue(controlContainer);

        // Convert the value for the grid's usage.
        object convertedValue = MyConversionFunction(boundValue);

        return convertedValue;
    }
}

用法:

<asp:GridView ... >
    <asp:BoundField .... />
    <custom:MyBoundField .... />
</asp:GridView>

Telerik选项:

public class MyGridBoundColumn
    : GridBoundColumn
{
    protected override string FormatDataValue(object dataValue, GridItem item)
    {
        if ( someCondition )
        {
            return MyFormatFunction(dataValue, item);
        }
        else
        {
            return base.FormatDataValue(dataValue, item);
        }
    }

    // Override what method in order to convert the value for all grid functionality????
}

问题: 如何在RadGrid中使用Telerik GridBoundColumn执行等效的BoundField.GetValue?如果没有真正的等价物,可用的选项有哪些?

1 个答案:

答案 0 :(得分:0)

使用OnItemDataBound事件并直接修改单元格,如下所示:http://www.telerik.com/help/aspnet-ajax/grid-accessing-cells-and-rows.html

我们假设你有这个标记:

        <telerik:RadGrid ID="RadGrid1" runat="server" OnItemDataBound="RadGrid1_ItemDataBound">
            <MasterTableView>
                <Columns>
                    <telerik:GridBoundColumn UniqueName="first" DataField="Notification"></telerik:GridBoundColumn>
                </Columns>
            </MasterTableView>
        </telerik:RadGrid>

您的数据源中存在通知字段。这是一个示例服务器处理程序:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem dataItem = e.Item as GridDataItem;
        dataItem["first"].Text = dataItem["first"].Text + DateTime.Now.ToString();
    }
}

请注意如何在服务器代码中使用列的UniqueName。