gridview выбранное значение - PullRequest
0 голосов
/ 02 февраля 2012

У меня есть один вид сетки с именем 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 голосов
/ 02 февраля 2012

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

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

0 голосов
/ 02 февраля 2012

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 + " ";
 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...