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

C#中DataGrid指定行求和:按同名汇总Price列

解决DataGrid中同名数据的Price列求和问题

方案1:SQL查询阶段直接聚合(推荐)

从数据库层面完成分组求和,效率最高,返回结果直接绑定到DataGrid即可展示每个名称的总价格。

假设你的数据表名为Products,执行以下SQL语句:

SELECT Name, SUM(Price) AS TotalPrice
FROM Products
GROUP BY Name

查询结果会返回每个唯一Name对应的Price总和(比如A对应10,B对应11),直接将结果集绑定到DataGrid就能实现单独汇总效果。

如果需要筛选特定名称(比如只汇总A或B),可添加WHERE条件:

SELECT Name, SUM(Price) AS TotalPrice
FROM Products
WHERE Name IN ('A', 'B')
GROUP BY Name

方案2:前端DataGrid中处理(保留原始数据时适用)

如果需要保留原始数据展示,同时在前端完成分组求和,可利用语言自带的集合处理能力:

C#(WPF/WinForms/Blazor)

假设数据实体为Product(包含Name和Price属性),从数据库获取原始数据后用LINQ分组求和:

var rawData = GetProductsFromDatabase(); // 从SQL获取原始数据
var summarizedData = rawData
    .GroupBy(p => p.Name)
    .Select(g => new 
    { 
        Name = g.Key, 
        TotalPrice = g.Sum(p => p.Price) 
    })
    .ToList();

// 绑定到DataGrid
yourDataGrid.ItemsSource = summarizedData;

JavaScript(Vue/React等前端框架)

用数组reduce方法实现分组求和:

// 假设原始数据为rawData数组
const summarizedData = Object.values(rawData.reduce((acc, item) => {
  if (!acc[item.Name]) {
    acc[item.Name] = { Name: item.Name, TotalPrice: 0 };
  }
  acc[item.Name].TotalPrice += item.Price;
  return acc;
}, {}));

// 绑定到DataGrid组件
yourDataGrid.data = summarizedData;

方案3:DataGrid分组显示并在组内求和(保留原始数据+分组汇总)

如果需要同时展示原始数据和对应名称的求和值,可利用DataGrid的分组功能,以Name为分组依据,在组头/组尾显示总和:

以WPF DataGrid为例,XAML配置如下:

<DataGrid x:Name="yourDataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="名称" Binding="{Binding Name}" />
        <DataGridTextColumn Header="价格" Binding="{Binding Price}" />
    </DataGrid.Columns>
    <DataGrid.GroupStyle>
        <GroupStyle>
            <GroupStyle.HeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" Margin="0,5">
                        <TextBlock Text="{Binding Name}" FontWeight="Bold" FontSize="14" />
                        <TextBlock Text=" 总价格: " Margin="10,0" />
                        <TextBlock Text="{Binding Items, Converter={StaticResource SumPriceConverter}}" />
                    </StackPanel>
                </DataTemplate>
            </GroupStyle.HeaderTemplate>
        </GroupStyle>
    </DataGrid.GroupStyle>
</DataGrid>

需实现值转换器SumPriceConverter计算组内价格总和:

public class SumPriceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var items = value as IEnumerable<Product>;
        return items?.Sum(p => p.Price) ?? 0;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

最后在资源中声明转换器:

<Window.Resources>
    <local:SumPriceConverter x:Key="SumPriceConverter" />
</Window.Resources>

内容的提问来源于stack exchange,提问作者Andy García

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:15:34