显示dataGridView中列值的总和

时间:2016-05-10 12:28:48

标签: c# sql-server winforms datagridview

我是C#的新手,所以我不知道我是否会正确解决我的问题,所以请耐心等待。

我有一个名为dgvShowAllData的dataGridView,它有一个来自我的sqlServer的数据源。有一个名为Price的专栏。 我想在dataGridView的行末尾添加一个新行,以显示Price列值的总和。 我尝试了多种解决方案并遇到了一些错误。 我找到了一个解决方案,总和将从sqlServer执行。 如下,

Select Sum(Price) from tblProduct

但我也被困在那里了。我并不完全知道如何在dataGridview中执行两个数据源。 请告诉我一个更好的方法,因为我可以在dataGridView的最后得到总数。

4 个答案:

答案 0 :(得分:0)

在您的代码中,为您的dataGridView创建一个自定义页脚行,并在页脚行中的元素中填充总值。

答案 1 :(得分:0)

使用数据表作为DataGridView的数据源。然后将数据行添加到数据表中,Data Table具有计算功能。

我将如何解决这个问题的一个例子;

DataTable dt;
dt = yourDataSource; //add your data source to the Data Table
DataRow dr = dt.NewRow();
dr("Price") = dt.Compute("Sum(Price)", "");
dt.Rows.Add(dr);
dgvShowAllData.DataSource = dt;

答案 2 :(得分:0)

Ngengis的解决方案为我的实施工作。我的应用程序事先不知道名称,类型或列数,因此我需要对其进行一些调整。我使用了扩展方法(由Dmytrii Nagirniak设计)来检查DataColumn.DataType是否为数字:

    public static bool IsNumeric(this DataColumn col)
    {
        if (col == null)
            return false;
        var numericTypes = new[] { typeof(Byte), typeof(Decimal), typeof(Double), typeof(Int16), typeof(Int32), typeof(Int64), typeof(SByte), typeof(Single), typeof(UInt16), typeof(UInt32), typeof(UInt64)};
        return numericTypes.Contains(col.DataType);
    }

我使用循环来创建总行。我需要捕获一个SyntaxErrorException,以防列名不能与Compute()方法配合使用(其中带括号的聚合列会失败;使用列别名可以解决此问题)

        //Total Row
        if (MakeTotalRow == true)
        {
            DataRow dr = dt.NewRow();
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                var colName = dt.Columns[j].ColumnName;
                if (dt.Columns[j].IsNumeric()) //ensure column data can be summed
                {
                    try
                    {
                        dr[j] = dt.Compute("Sum(" + colName + ")", "");
                    }
                    catch (SyntaxErrorException e)
                    {
                        //possible syntax error in the column name 
                    }
                }

            }
            dt.Rows.Add(dr);
        }

答案 3 :(得分:-1)

首先,你必须使用LINQ entityframework然后:

您应该测试它们将要处理的这些代码,例如,您在&#39; Price&#39;中命名的数据库中的字段,请尝试:

一步一步,

1.制作一个清单&lt;&gt;来自您的数据库:

Textblock.text=lst.Where(w=>w.PriceId==1).sum(w=>w.Price).tostring("#,##");

所以你可以使用来自C#的查询,

index.js

它可以帮助你。