2012-02-02 51 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中執行計算(如以''getTopSectors'作爲SP,它將%值作爲參數)。 – 2012-02-02 14:43:25

+0

我不能這樣做嗎? – user1125911 2012-02-02 14:44:14

+0

是的,你可以,但你不需要通常這樣做。目前還不清楚你想達到的目標。是否必須顯示所有記錄,或只有部門> = 30%? – 2012-02-02 14:45:43

回答

0

1)在for循環中執行以下操作wonT會給你你所需要的。

 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 
} 

編輯:如果要列出部門在您的標籤(雖然我不知道你將如何構建文本)

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

lbsector是我的標籤的名稱 – user1125911 2012-02-02 14:53:49

+0

我希望該字段顯示爲標籤。可能嗎? – user1125911 2012-02-02 14:55:48

+0

你的'lbSector'在哪裏?(它是GridView中的列數據'ItemTemplate'?或者它只是網格外的標籤嗎?) – 2012-02-02 15:04:10

0

通常我會做的這種計算DBMS(在存儲過程或表值函數中)。這比使用ASP.NET應用程序的GridView硬鏈接更快,更好地重用。

我不確定你是否只希望顯示GridView中的Top-Sectors,或者所有標籤都只顯示名稱,如果它屬於頂級扇區。

如果是後者,你應該在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計算如上圖所示這個值。