You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Telerik RadDataGrid:如何在自定义分组头中显示列名?

在Telerik RadDataGrid自定义分组头中显示列名的实现方案

嘿,我之前刚好解决过这个需求!官方文档确实没专门针对这个场景给出方案,但其实通过自定义GroupHeaderTemplate结合绑定分组描述符的属性就能轻松实现,下面是具体的做法:

核心思路

RadDataGrid的分组头模板(GroupHeaderTemplate)的DataContext是DataGridGroupHeaderContext对象,它包含了当前分组的Group(分组数据集合)和GroupDescriptor(分组描述信息),而GroupDescriptor里的DisplayName或Member属性就能帮我们获取到分组对应的列名/列显示名称。

具体实现步骤

1. XAML中直接定义模板(手动列配置场景)

如果是手动配置列和分组描述符,直接在XAML里指定GroupHeaderTemplate,并绑定到GroupDescriptor.DisplayName(优先用这个,因为可以自定义显示名称):

<telerik:RadDataGrid x:Name="productGrid" AutoGenerateColumns="False">
    <!-- 配置分组描述符,DisplayName设置为列的显示名称 -->
    <telerik:RadDataGrid.GroupDescriptors>
        <telerik:PropertyGroupDescriptor Member="Category" DisplayName="Product Category"/>
    </telerik:RadDataGrid.GroupDescriptors>
    
    <!-- 配置列 -->
    <telerik:RadDataGrid.Columns>
        <telerik:DataGridTextColumn PropertyName="Category" Header="Product Category"/>
        <telerik:DataGridTextColumn PropertyName="ProductName" Header="Product Name"/>
        <telerik:DataGridNumericalColumn PropertyName="Price" Header="Unit Price"/>
    </telerik:RadDataGrid.Columns>
    
    <!-- 自定义分组头模板 -->
    <telerik:RadDataGrid.GroupHeaderTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Padding="8,4" Background="#F0F0F0">
                <TextBlock Text="Grouped by: " FontWeight="SemiBold"/>
                <!-- 绑定分组描述符的DisplayName,即我们设置的列显示名称 -->
                <TextBlock Text="{Binding GroupDescriptor.DisplayName}" Margin="4,0,0,0" Foreground="#2C3E50"/>
                <TextBlock Text=" (" Margin="8,0,0,0"/>
                <TextBlock Text="{Binding Group.Count}" Foreground="#E74C3C"/>
                <TextBlock Text=" items)"/>
            </StackPanel>
        </DataTemplate>
    </telerik:RadDataGrid.GroupHeaderTemplate>
</telerik:RadDataGrid>

2. 代码后台创建分组描述符(动态分组场景)

如果是在代码里动态添加分组,记得给PropertyGroupDescriptor设置DisplayName为对应列的Header名称:

// 获取要分组的列(假设列已存在)
var categoryColumn = productGrid.Columns.First(c => c.PropertyName == "Category");

// 创建分组描述符
var groupDescriptor = new PropertyGroupDescriptor
{
    Member = categoryColumn.PropertyName,
    DisplayName = categoryColumn.Header.ToString() // 绑定列的Header作为分组头的列名
};

// 添加到分组描述符集合
productGrid.GroupDescriptors.Add(groupDescriptor);

3. 自动生成列场景下的适配

如果是自动生成列,你可以在AutoGeneratingColumn事件里同步设置分组描述符的DisplayName:

private void ProductGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    // 假设我们要按"Category"列分组
    if (e.Column.PropertyName == "Category")
    {
        var groupDescriptor = new PropertyGroupDescriptor
        {
            Member = e.Column.PropertyName,
            DisplayName = e.Column.Header.ToString() // 使用自动生成列的Header作为分组列名
        };
        (sender as RadDataGrid).GroupDescriptors.Add(groupDescriptor);
    }
}

补充说明

这个方案适用于WPF、UWP以及Xamarin平台的RadDataGrid,因为它们的DataGridGroupHeaderContext和PropertyGroupDescriptorAPI结构基本一致。如果不需要自定义显示名称,直接绑定GroupDescriptor.Member也能显示列的属性名(即PropertyName)。

内容的提问来源于stack exchange,提问作者Manish Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:33:27