【问题标题】:gridview selected value网格视图选择值
【发布时间】:2012-02-02 14:37:16
【问题描述】:

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

        }    
    }
}

【问题讨论】:

  • 您应该在 dbms 中进行计算(例如,作为 SP getTopSectors,它以 % 值作为参数)。
  • 是的,您可以,但您不需要正常操作。还不清楚您要达到的目标。必须显示所有记录还是只显示扇区 >= 30% 的记录?
  • 数据库中的数据均为历史数据。就像买卖股票一样。它不应该将持有的百分比存储在 dbms 中,对吧?
  • 扇区>30%的扇区名称将显示为lbSector(一个标签)。

标签: c# asp.net gridview


【解决方案1】:

通常我会在 DBMS 中进行此类计算(例如,在存储过程或表值函数中)。这比将其与 ASP.NET 应用程序的 GridView 硬链接更快且可重用性更好。

我不确定您是否只想在 GridView 中显示顶级部门或全部,但标签应该只显示属于顶级部门的名称。

如果是后者,您应该在 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 来计算该值,如上所示。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • lbsector 是我的标签名称
    • 你的lbSector在哪里(是GridView中的列数据ItemTemplate?还是只是网格外的标签?)
    • 它是gridview之外的一个标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多