我是C#的新手,所以我不知道我是否会正确解决我的问题,所以请耐心等待。
我有一个名为dgvShowAllData的dataGridView,它有一个来自我的sqlServer的数据源。有一个名为Price的专栏。 我想在dataGridView的行末尾添加一个新行,以显示Price列值的总和。 我尝试了多种解决方案并遇到了一些错误。 我找到了一个解决方案,总和将从sqlServer执行。 如下,
Select Sum(Price) from tblProduct
但我也被困在那里了。我并不完全知道如何在dataGridview中执行两个数据源。 请告诉我一个更好的方法,因为我可以在dataGridView的最后得到总数。
答案 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
它可以帮助你。