Fazer uma PerguntaFazer uma Pergunta
 

RespondidoTotalizar registros de um ObjectDataSource

  • terça-feira, 27 de outubro de 2009 18:51_Vivi_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Olá pessoal,

    Tenho uma gridview paginada, utilizando objectDataSource.  

    Como posso mostrar no rodapé a quantidade total de registros, não o total por página, mais sim a quantidade total geral de registros, considerando todas as páginas?

    Obrigada!

Respostas

Todas as Respostas

  • terça-feira, 27 de outubro de 2009 19:14Seilor Bonancio Junior Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Vc pode usar o
    SelectCountMethod para fazer o calculo para vc e vc salva o valor no footer da grid

    da uma olhada

    http://fredrik.nsquared2.com/viewpost.aspx?PostID=229
  • terça-feira, 27 de outubro de 2009 19:59Junior_luiz Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Vivi, veja se esse tutorial resolve seu problema

    http://www.asp.net/learn/data-access/tutorial-15-vb.aspx
    Junior
  • terça-feira, 27 de outubro de 2009 22:05Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Oi,

    Crie a seguinte variável :

            decimal total;

    Mude a propriedade showfooter da gridview para true

    Insira no rodapé de uma das colunas um label chamado lbltotal


    Supondo que seu objectdatasource devolve uma datatable, dentro do evento rowdatabound da gridview, programe o seguinte (corrija as maiusculas e minusculas) :

    if (e.row.rowtype==datarow)
    {
        if (total==0)
       {
             total= ((data.datarowview)e.row.dataitem).dataview.table.select("sum(valorasersomado)");   // linha x
       }
    }
    else if (e.row.rowtype==footer)
    {

    label lbl;
    lbl=(label)e.row.findcontrol("lbltotal");
    lbl.text=string.format("{0:C}",total);
    }

    Caso seu objectDataSource não esteja devolvendo datatable, troque a "linha x" por uma totalização dos objetos que ele devolve. Sugiro usar linq nesse caso, mas não posso ajudar mais pois não sei que objetos são.

    []'s
    Dennes
    http://twitter.com/Dennes

    * Treinamento C# e Framework .NET c/OO dia  31/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    * Treinamento de ASP.NET 3.5 no RJ dia 16/11 - Apenas 12x R$ 60,48 - Inscreva-se em http://www.bufaloinfo.com.br/descontoaspnetantecipado.asp

    Tel : (11) 3170-3056 (21)9240-5134 E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
  • quarta-feira, 28 de outubro de 2009 20:27_Vivi_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Olá pessoal,

    Resolvi assim:

    Public Function TotalRegistros() As Integer
            Dim dt As New DataTable()
            dt = clMembership.ListarColaboradores(Convert.ToBoolean(dropAtivo.SelectedValue()), txtBusca.Text.Trim)
            dt.Dispose()
            Return dt.Rows.Count()
        End Function

    Depois, num label coloquei:

    lblResposta.Text = "Foram encontrados " + TotalRegistros().ToString() + " registros"
    Obrigada a todos!
    • Não Marcado como Resposta_Vivi_ sexta-feira, 6 de novembro de 2009 18:52
    • Marcado como Resposta_Vivi_ quarta-feira, 28 de outubro de 2009 20:27
    •  
  • quinta-feira, 29 de outubro de 2009 0:46Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Oi, Vivi,

    A diferença da forma como você fez e a forma que indiquei para você é que da forma como você fez você chamou novamente o método que lista seus dados. Os problemas disso são :

    1) Você duplicou o processamento de acesso aos dados, duplicando o consumo de performance da página

    2) Você colocou em 2 locais da página a mesma chamada. Isso é ruim para manutenção, lembrar daqui a 1 ano que isso está em dois lugares diferentes...


    Da forma que indiquei você chegará no mesmo resultado e não terá esses problemas pois o código utiliza a datatable já retornada pelo objectdatasource.

    []'s
    Dennes
    http://twitter.com/Dennes

    * Treinamento C# e Framework .NET c/OO dia  31/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    * Treinamento de ASP.NET 3.5 no RJ dia 16/11 - Apenas 12x R$ 60,48 - Inscreva-se em http://www.bufaloinfo.com.br/descontoaspnetantecipado.asp

    Tel : (11) 3170-3056 (21)9240-5134 E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
  • quinta-feira, 29 de outubro de 2009 12:17_Vivi_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Oi Dennes,

    Da forma que vc falou seria pra totalizar os valores de uma coluna do grid, não é?

    O que eu preciso é totalizar os registros do resultado da busca. Estou exibindo paginado, mas preciso exibir o total de registros retornados pela busca, por isso fiz dessa forma...

    Obrigada!
  • quinta-feira, 29 de outubro de 2009 12:27kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Oi,

            Para pegar a quantidade total de registros que foram retornados pelo ObjectDataSource eu costumo fazer assim:

            Utilize o evento "Selected" do ObjectDataSource.
            
            protected void odsIdSeuObjectDataSource_Selected(object sender, ObjectDataSourceStatusEventArgs e)
            {
                int qtdRegistros = 0;
                qtdRegistros = ((AquiVemOTipoDoObjetoQueSeuObjectDataSourceRetorna)e.ReturnValue).Count;
            }

           
  • quinta-feira, 29 de outubro de 2009 12:46_Vivi_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Oi Kaue,

    Converti seu código para vb.net, ficou assim:


        Protected Sub ObjectDataSource1_Selected(ByVal sender As Object, ByVal e As ObjectDataSourceStatusEventArgs)
            Dim qtdRegistros As Integer = 0
            qtdRegistros = DirectCast(e.ReturnValue, DataTable).Count
        End Sub
    

    Mas dá o seguinte erro:

    'Count' is not a member of 'System.Data.DataTable'.

    Obrigada!
  • quinta-feira, 29 de outubro de 2009 12:52kauebranco Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     
    Tente:

               qtdRegistros = DirectCast(e.ReturnValue, DataTable).Rows.Count
  • quinta-feira, 29 de outubro de 2009 15:03Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     

    Oi, Vivi,

    Não, não seria para totalizar uma coluna da grid.

    Da forma como demonstrei, a grid é utilizada para buscar a origem de dados sem que seja necessário refazer a query e totalizar a origem de dados sem fazer a query novamente.


    Veja o mesmo código em VB:

    if (e.row.rowtype=datarow) then
         if total=0 then
           total=directcast(e.row.dataitem,datarowview).dataview.table.select("sum(valorasersomado)")
         endif
    elseif e.row.rowtype=footer then
        dim lbl as label
        lbl=e.row.findcontrol("lbltotal")
        lbl.text=string.format("{0:C}",total)
    endif

    []'s
    Dennes
    http://twitter.com/Dennes

    * Treinamento C# e Framework .NET c/OO dia  31/10 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    * Treinamento de ASP.NET 3.5 no RJ dia 16/11 - Apenas 12x R$ 60,48 - Inscreva-se em http://www.bufaloinfo.com.br/descontoaspnetantecipado.asp

    Tel : (11) 3170-3056 (21)9240-5134 E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br

     


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
  • sexta-feira, 6 de novembro de 2009 18:47_Vivi_ Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Oi Dennes,

    Fiz assim:


    Public Sub SomarRegistros(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridView.RowDataBound
            Dim total As Integer
    
            If (e.Row.RowType = DataControlRowType.DataRow) Then
                If total = 0 Then
                    total = Convert.ToInt32(DirectCast(e.Row.DataItem, DataRowView).DataView.Table.Select("sum(IdColaborador)"))
                End If
            ElseIf e.Row.RowType = DataControlRowType.Footer Then
                Dim lbl As Label
                lbl = e.Row.FindControl("lblTotal")
                lbl.Text = String.Format("{0:C}", total)
            End If
        End Sub
    
    Mas acho que não estou sabendo o que colocar em "sum(valorasersomado)". Usei a coluna IdColaborador mas dá o seguinte erro: "Expressão de filtro 'sum(IdColaborador)' não avalia um termo booleano. "

    A coluna IdColaborador é autonumérica. Não quero somar  os valores desta coluna, mas somar a qtd total de registros retornados pelo DataTable.

    Vc sabe como posso resolver?
    Obrigada!




  • sexta-feira, 6 de novembro de 2009 19:08RRCruz Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Contém Código
    Oi Dennes,

    Fiz assim:


    Public
    
    
     Sub
    
    
     SomarRegistros(ByVal
    
    
     sender As
    
    
     Object
    
    
    , ByVal
    
    
     e As
    
    
     GridViewRowEventArgs) Handles
    
    
     GridView.RowDataBound
            Dim
    
    
     total As
    
    
     Integer
    
    
    
    
            If
    
    
     (e.Row.RowType = DataControlRowType.DataRow) Then
    
    
    
                If
    
    
     total = 0 Then
    
    
    
                    total = Convert.ToInt32(DirectCast
    
    
    (e.Row.DataItem, DataRowView).DataView.Table.Select
    
    
    ("sum(IdColaborador)"
    
    
    ))
                End
    
    
     If
    
    
    
            ElseIf
    
    
     e.Row.RowType = DataControlRowType.Footer Then
    
    
    
                Dim
    
    
     lbl As
    
    
     Label
                lbl = e.Row.FindControl("lblTotal"
    
    
    )
                lbl.Text = String
    
    
    .Format("{0:C}"
    
    
    , total)
            End
    
    
     If
    
    
    
        End
    
    
     Sub
    
    
    
    
    Mas acho que não estou sabendo o que colocar em "sum(valorasersomado)". Usei a coluna IdColaborador mas dá o seguinte erro: "Expressão de filtro 'sum(IdColaborador)' não avalia um termo booleano. "

    A coluna IdColaborador é autonumérica. Não quero somar  os valores desta coluna, mas somar a qtd total de registros retornados pelo DataTable.

    Vc sabe como posso resolver?
    Obrigada!





    Na realidade não precisa somar o teu ID, e sim contar quantos registros tu teria. Ao contrário de jogar pro total a soma dos IDs tu apenas incrementa a variável total.

    PS.: Claro que nesse caso a variável total teria que ser declarada na tua classe e não dentro da tua função.

    Abraços,
    Rafael Cruz
  • sexta-feira, 6 de novembro de 2009 21:29Dennes Medalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuárioMedalhas de usuário
     Respondido

    Oi,

    Troque a linha do cálculo :

    total = DirectCast(e.Row.DataItem, DataRowView).DataView.Table.Rows.Count


    []'s
    Dennes
    http://twitter.com/Dennes

    * Treinamento C# e Framework .NET c/OO dia  07/11 - Apenas 12 R$ 42,53  Inscreva-se em http://www.bufaloinfo.com.br/cursos/fundamentosOOFramework.asp

    * Treinamento de ASP.NET 3.5 no RJ dia 16/11 - Apenas 12x R$ 60,48 - Inscreva-se em http://www.bufaloinfo.com.br/descontoaspnetantecipado.asp

    Tel : (11) 3170-3056 (21)9240-5134 E-Mail: contato arroba bufaloinfo.com.br
    http://www.bufaloinfo.com.br


    Dennes - Se resolveu, classifique a mensagem, por favor - [http://www.bufaloinfo.com.br] NOVO DVD Segurança no ASP.NET : http://www.bufaloinfo.com.br/LearingSeriesSegurancaASPNET2.asp
    • Marcado como Resposta_Vivi_ segunda-feira, 9 de novembro de 2009 16:14
    •