2012-02-02 2 views
0

У меня есть один вид сетки с именем gvSector. Поля этой таблицы выглядит следующим образом:gridview выбранное значение

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

Вы должны выполнить вычисления в dbms (например, как SP 'getTopSectors', который принимает значение% в качестве аргумента). –

+0

Я не могу так сделать? – user1125911

+0

Да, вы можете, но вам не обязательно делать это нормально. Также неясно, чего вы пытаетесь достичь. Нужно ли показывать все записи или только с сектором> = 30%? –

ответ

0

1) Выполнение следующего в цикле forW дает вам то, что вам нужно.

 double SAmt = Convert.ToDouble(gvSector.Rows[i].Cells[1].Text); 
     TotalInvestments += SAmt; 
     double PercentSAmt = (SAmt/TotalInvestments) * 100; 

Вместо расчета TotalInvestments в другом месте заранее.

2) Если вы хотите, чтобы показать строки условно, вы можете изменить видимость вашего GridViewRow или удалить строка от DataTable перед связыванием и так далее.

double PercentSAmt = (SAmt/TotalInvestments) * 100; 
if (PercentSAmt > 30.0) 
{   
    gvSector.Rows[i].Cells[1].Text 
} 

Edit: если вы хотите, чтобы список секторов в наклейке (хотя я не знаю, как вы собираетесь структурировать текст)

double PercentSAmt = (SAmt/TotalInvestments) * 100; 
if (PercentSAmt > 30.0) 
{   
    lbSector.Text += gvSector.Rows[i].Cells[0].Text + " "; 
} 
+0

lbsector - это имя моей метки – user1125911

+0

Я хотел, чтобы поле отображалось как метка. Является ли это возможным? – user1125911

+0

Где ваш 'lbSector' (это данные столбца' ItemTemplate' в 'GridView'? Или это просто ярлык вне сетки?) –

0

Обычно я хотел бы сделать такие расчеты в СУБД (fe в хранимой процедуре или табличной функции). Это быстрее и лучше использовать повторно, чем привязывать его с помощью GridView приложения ASP.NET.

Я не уверен, что вы хотите, чтобы tro отображал Top-Sectors в 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 для вычисления этого значения, как показано выше.

Смежные вопросы