我有一个名为gvSector的网格视图。 该表的字段如下:
Sector Name Amount Invested
Finance 300000
Properties 100000
... ...
条件:如果投资于特定行业的金额超过30%
我的标签lbSector
将显示行业名称。
.cs文件中的代码如下。
double TotalInvestments = 0.0;
for (int i = 0; i < gvSector.Rows.Count; i++)
{
if (gvSector.Rows.Count > 0)
{
double SAmt = Convert.ToDouble(gvSector.Rows[i].Cells[1].Text);
TotalInvestments += SAmt;
double PercentSAmt = (SAmt / TotalInvestments) * 100;
if (PercentSAmt > 25.0)
{
//I've no idea what to put here. It is supposed to show the sector(s) that is more than 25% from the gridview.
}
}
}
答案 0 :(得分:0)
1)在for循环中执行以下操作将为您提供所需的信息。
double SAmt = Convert.ToDouble(gvSector.Rows[i].Cells[1].Text);
TotalInvestments += SAmt;
double PercentSAmt = (SAmt / TotalInvestments) * 100;
而是预先计算其他地方的TotalInvestments
。
使用linq:How to calculate sum of a DataTable's Column in LINQ (to Dataset)?
使用DataTable.Compute
进行linq:msdn post
2)如果要有条件地显示行,可以更改GridViewRow
的可见性,或在绑定前从DataTable
删除行等等。
double PercentSAmt = (SAmt / TotalInvestments) * 100;
if (PercentSAmt > 30.0)
{
gvSector.Rows[i].Cells[1].Text
}
编辑:如果您想列出标签中的扇区(虽然我不知道您将如何构建文本)
double PercentSAmt = (SAmt / TotalInvestments) * 100;
if (PercentSAmt > 30.0)
{
lbSector.Text += gvSector.Rows[i].Cells[0].Text + " ";
}
答案 1 :(得分:0)
通常我会在DBMS中进行这样的计算(例如,在存储过程或表值函数中)。与使用ASP.NET应用程序的GridView进行硬链接相比,这样可以更快,更好地重用。
我不确定你是否只想要在GridView中显示top-Sectors,或者除了Label之外只显示名称,如果它属于顶级扇区。
如果是后者,您应该在GridView的RowDataBound中执行此操作。这样你只有一个循环,只有数据绑定:
protected void Grid_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) {
var data = (DataRowView)e.Row.DataItem;
var lbSector = (Label)e.Row.FindControl("lbSector");
var amount = (int)data("Amount");
var amountOverAll = (long)data.DataView.Table.Compute("SUM(Amount)", null);
if (amount * 100 / amountOverAll >= 30) {
lbSector.Text = data("Sector").ToString();
}
}
}
您可以使用DataTable.Compute计算此值,如上所示。