gridview选择的值

时间:2012-02-02 14:37:16

标签: c# asp.net gridview

我有一个名为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.

        }    
    }
}

2 个答案:

答案 0 :(得分:0)

1)在for循环中执行以下操作将为您提供所需的信息。

        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 + " ";
 } 

答案 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计算此值,如上所示。