Ir para conteúdo
Fórum Script Brasil
  • 0

Dados No Datagrid Não Dão Refresh.


Nabvchodhonozohr

Pergunta

Olá pessoal!

Sei q a minha pergunta pode parecer ridícula, mas devido ao meu tempo BEM escasso para terminar o projeto da faculdade, estou com o seguinte problema:

Tenho um datagrid q me traz os dados de um cliente pré-selecionado em uma drop down e após o click do botão ao lado do drop down eu recebo o grid preenchido com os dados referentes aos serviços solicitados pelo cliente. Nessa grid eu tenho uma coluna do tipo EditCommand q faz a edição da linha normalmente. Em outra coluna eu tenho 2 links q chamam duas rotinas no meu código: aprovar e cancelar. As duas rotinas funcionam perfeitamente. Mas hj eu me deparei com o seguinte problema, não importa o quanto eu aperte F5 ou Ctrl + F5 esses dados não são atualizados na grid de forma alguma. Tipo, se aprovar tem q mudar o status na grid para 'APROVADO' conforme o status q é feito update no banco. Já tentei EnableViewState = false e nada. O q poderia ser? sei q pode ser simples isso, mas nunca estudei muito sobre armazenamento em cache de dados da página e o viewstate. O q eu faço pra quando selecionar esse link atualizar o grid? Eis abaixo algum código caso seja necessário.

Sub aprovarOS(ByVal s As Object, ByVal e As EventArgs)
        Dim strObs As String = Me.dgRel.Items.Item(s.parent.parent.itemindex).Cells(1).Text 'pega a obs
        Dim intOsID As Integer = CInt(Me.dgRel.Items.Item(s.parent.parent.itemindex).Cells(0).Text) 'pega o id

        objOS.OBS = strObs

        objOS.aprovarOS(intOsID)

    End Sub

    Sub cancelarOS(ByVal s As Object, ByVal e As EventArgs)
        Dim strObs As String = Me.dgRel.Items.Item(s.parent.parent.itemindex).Cells(2).Text 'pega a obs
        Dim intOsID As Integer = CInt(Me.dgRel.Items.Item(s.parent.parent.itemindex).Cells(0).Text) 'pega o id

        objOS.OBS = strObs

        objOS.cancelarOS(intOsID)

    End Sub
...html...
<asp:TemplateColumn HeaderText="Mudar Status">
          <ItemTemplate>
          	<ul>
            <asp:LinkButton ID="aprovaOS" OnClick="aprovarOS" Runat=server CommandName="aprovarOS" CommandArgument='<%#Container.DataItem("osID")%>'>Aprovar OS</asp:LinkButton></ul>
          	<br>
          	<ul>
            <asp:LinkButton ID="cancelaOS" OnClick="cancelarOS" Runat="server">Cancelar OS</asp:LinkButton></ul>
          </ItemTemplate>
        	</asp:TemplateColumn>

Valeu.

Abs.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Não sei se entendi bem qual é o problema... mas de onde estão vindo os dados? De um DataSet/DataTable? Ou você preenche manualmente? Porque se for manualmente, bastaria fazer:

        Public Sub ColunaLinkButton_Click(ByVal sender As Object, ByVal e As EventArgs)
            Dim botão As LinkButton = sender
            Dim célula As TableCell = botão.Parent
            Dim item As DataGridItem = célula.Parent
            Dim página As Page = botão.Page

            item.Cells(2).Text = "mudou!"
        End Sub

Tal qual aquele exemplo que te passei no outro dia, só que dessa vez eu estou atribuindo um valor à propriedade Text de uma célula da linha clicada.

Seria isso?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Tá dormindo tarde hein Gray!

Pow cara, eu estou preenchendo com um dataset normal. Eu acho q já estou sacando porque não dá refresh nos valores. Ahá!!! Eureka! Acho q eu tenho q criar uma função q faz o bind no datagrid e sempre q fizer uma mudança em algum dado chamar essa função para re-popular o datagrid. Estou certo?

Aí, o Pena acha q dá pra mim passar na quarta. Mesmo assim eu estou largando o couro pra fazer o máximo de funcionalidades do sistema.

Valeu.

Abs.

Link para o comentário
Compartilhar em outros sites

  • 0

Tá dormindo tarde hein Gray!

É normal... hehehe.

Pow cara, eu estou preenchendo com um dataset normal. Eu acho q já estou sacando porque não dá refresh nos valores. Ahá!!! Eureka! Acho q eu tenho q criar uma função q faz o bind no datagrid e sempre q fizer uma mudança em algum dado chamar essa função para re-popular o datagrid. Estou certo?

Ah, agora entendi. Mas não, você não precisa criar. Basta chamar o método DataBind() da DataGrid:

            Dim botão As LinkButton = sender
            Dim célula As TableCell = botão.Parent
            Dim item As DataGridItem = célula.Parent
            Dim dg As DataGrid = item.Parent.Parent
            Dim dt As DataTable = dg.DataSource

            dt.Rows(1)(1) = "mudou!"
            dg.DataBind()

Note que se eu mudar "dt" (meu DataTable que está na propriedade DataSource da DataGrid), sem chamar a última linha do código acima (dg.DataBind()) realmente a grade não é atualizada. Você pode utilizar o código acima nas sua subs.

Aí, o Pena acha q dá pra mim passar na quarta. Mesmo assim eu estou largando o couro pra fazer o máximo de funcionalidades do sistema.

Vou lá quarta-feira pra ver a tua apresentação. smile.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Pow, pode ir mas sem perguntar nada hein. Se não me ferra! hehehe.

É claro que vou perguntar!!! Logo a primeira pergunta vai ser: está OO? Hehehehehe... brincadeirinha... se preocupa com isso, não.

estou nervosão. Mas acho q essa primeira banca vai ser mais light. Acho q até o Cossenza vai estar na banca. Q bom.

Se a gente não se falar até lá, boa sorte! (E me lembra de te devolver teu livro... estou andando com ele a semana toda).

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...