Обычно я делал бы такие вычисления в СУБД (например, в хранимой процедуре или табличной функции).Это быстрее и лучше использовать повторно, чем жестко связывать его с GridView приложения ASP.NET.
Я не уверен, хотите ли вы, чтобы в верхних секторах отображался только GridView или все, кроме метки должны отображаться толькоимя, если оно принадлежит верхним секторам.
Если последнее, вы должны сделать это в RowDataBound GridView.Таким образом, у вас есть только один цикл и только для привязки данных:
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 для вычисления этого значения, как показано выше.