2012-02-02 50 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计算如上图所示这个值。