none
Somar Coluna GridView RRS feed

  • Pergunta

  • Bom Dia a todos, estou tentando uma simples ação, que é somar uma coluna do grid e exibir o total no footer, mas nenhum tutorial que achei na net está ajudando, todos estão dando erro... inclusive o do MSDN

    private decimal _valorTotal;
    
    ...
    
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
            this._valorTotal +=
                ((DbDataRecord)e.Row.DataItem).GetDecimal(0);
        else if (e.Row.RowType == DataControlRowType.Footer)
            e.Row.Cells[0].Text = "Total: " + this._valorTotal.ToString("C2");
    }

    apesar de parecer simples, ele dá erro na linha: ((DbDataRecord)e.Row.DataItem).GetDecimal(0); 

    o erro que aparece é o seguinte:

    Error 1 Nome de espaço para nome ou tipo 'DbDataRecord' não pôde ser encontrado. Precisa de uma diretiva using ou de uma referência de conjunto de módulos (assembly)?

    se alguém puder ajudar agradeço... já percorri muitos sites na internet e nada até agora... não que seja algo tão difícil de se fazer assim... mas ta ficando complicado achar algum tutorial que realmente funcione de verdade!

    abraçosss

    terça-feira, 6 de março de 2012 14:37

Respostas

  • problema resolvido, segue o código

    decimal priceTotal = 0;
    int quantityTotal = 0;
    void detailsGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // add the UnitPrice and QuantityTotal to the running total variables
            priceTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, _
              "UnitPrice"));
            quantityTotal += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, _
              "Quantity"));
        }
        else if (e.Row.RowType == DataControlRowType.Footer)
        {
            e.Row.Cells[0].Text = "Totals:";
            // for the Footer, display the running totals
            e.Row.Cells[1].Text = priceTotal.ToString("c");
            e.Row.Cells[2].Text = quantityTotal.ToString("d");
            
            e.Row.Cells[1].HorizontalAlign = _
              e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Font.Bold = true;
        }
    }

    se alguem puder marcar como resposta ae agradeço

    terça-feira, 6 de março de 2012 18:57

Todas as Respostas

  • Boa tarde.

    Esta usando web ou winform?


    Consultoria .NET
    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    terça-feira, 6 de março de 2012 17:02
  • estou usando Web... agora dando uma fuçada em um forum americano consegui achar a solução que eu queria... o unico problema é que ele está replicando a coluna que eu quero somar, ao inves de botar apenas o total no final da coluna, ele cria uma coluna idêntica ao lado da coluna e coloca o total nessa nova coluna.... da uma olhada no codigo ae e ve oq vc acha de errado....

    protected void GridView1_RowDataBound
                       (object sender, GridViewRowEventArgs e)
    {
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
      decimal rowTotal = Convert.ToDecimal
                  (DataBinder.Eval(e.Row.DataItem, "Amount"));
      grdTotal = grdTotal + rowTotal;
     }
     if (e.Row.RowType == DataControlRowType.Footer)
     {
      Label lbl = (Label)e.Row.FindControl("lblTotal");
      lbl.Text = grdTotal.ToString("c");
     }
    }
    }

    <asp:TemplateField HeaderText="Amount">
         <ItemTemplate>
         <asp:Label ID="lblAmount" runat="server" 
                    Text='<%# "$"+Eval("Amount").ToString()%>'>
         </asp:Label>
         </ItemTemplate>
         <FooterTemplate>
         <asp:Label ID="lblTotal" runat="server"></asp:Label>
         </FooterTemplate>
         </asp:TemplateField>

    terça-feira, 6 de março de 2012 17:55
  • problema resolvido, segue o código

    decimal priceTotal = 0;
    int quantityTotal = 0;
    void detailsGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // add the UnitPrice and QuantityTotal to the running total variables
            priceTotal += Convert.ToDecimal(DataBinder.Eval(e.Row.DataItem, _
              "UnitPrice"));
            quantityTotal += Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, _
              "Quantity"));
        }
        else if (e.Row.RowType == DataControlRowType.Footer)
        {
            e.Row.Cells[0].Text = "Totals:";
            // for the Footer, display the running totals
            e.Row.Cells[1].Text = priceTotal.ToString("c");
            e.Row.Cells[2].Text = quantityTotal.ToString("d");
            
            e.Row.Cells[1].HorizontalAlign = _
              e.Row.Cells[2].HorizontalAlign = HorizontalAlign.Right;
            e.Row.Font.Bold = true;
        }
    }

    se alguem puder marcar como resposta ae agradeço

    terça-feira, 6 de março de 2012 18:57