【问题标题】:DatagridView C# Sum of columnsDatagridView C# 列的总和
【发布时间】:2018-05-31 14:12:27
【问题描述】:

您好,我想知道如何根据另一列中的值获得一列的总和。例如我有一个像这样的DatagridView

User   Value to sum
-------------------
User1       10
-------------------
User1       15
-------------------
User2       20
-------------------
User3       30

我想知道如何获得每个用户的总和。

预期输出

User1: 25        
User2: 20     
User3: 30

到目前为止,我有获取所有用户总和的代码,但我不知道如何获取每个用户。

提前感谢大家。

for (int i = 0; i < dataGridView2.Rows.Count-1; i++)
{
    total += Convert.ToInt32(dataGridView2.Rows[i].Cells[ColumnN].Value);
}

【问题讨论】:

  • 不能使用DataGridView作为源,不能使用DataGridView的源?这更容易
  • 也许如果您计算查询中的值,您可以按用户分组并使用 sum 来计算值。
  • 数据源是一个excel文件,我加载为DataTable以填充DatagridView我不知道是否有最好的方法,但这是我认为的唯一一个, 如何@Juan 我该怎么做?
  • 也许您可以从 excel 加载数据,存储在 sql server(或您拥有的任何数据库系统)中进行查询以计算值并读取查询结果并将其呈现在网格中.
  • 也许这种方法可以帮助你,但如果格式不正确,有时会失败。 stackoverflow.com/questions/24150739/… 如果您编写一个类似问题中的查询,您可以将其与 group by 和 sum 结合起来以提供网格,或者将其与 insert 结合以将数据加载到 sql server。

标签: c# linq datagridview


【解决方案1】:

你可以使用这个查询:

var userSums = dataGridView2.Rows.Cast<DataGridViewRow>()
    .GroupBy(row => row.Cells[0].Value.ToString())
    .Select(g => new { User = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });

【讨论】:

  • 这就像魅力一样。非常感谢蒂姆!
【解决方案2】:

如果您将数据提取为一对列表,您可以使用以下代码:

        var data = new List <KeyValuePair<string, int>>()
        {
            new KeyValuePair<string, int>( "User1", 10 ),
            new KeyValuePair<string, int>( "User1", 15 ),
            new KeyValuePair<string, int>( "User2", 20 ),
            new KeyValuePair<string, int>( "User3", 30 )
        };

        var res = data.GroupBy(x => x.Key);

        foreach (var item in res)
        {
            var user = item.ToList();
            var sum = item.Sum(x => x.Value);
            Console.WriteLine(user[0].Key + " " + sum);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多