Jump to content
Sign in to follow this  
progster

[Resolvido] Navegação DataGridView em VB.NET 2005 Express Edition

Recommended Posts

progster

Boa tarde.

Surgiu-me um problema que não estou a conseguir resolver.

Normalmente trabalho com Visual Studio.Net, mas recentemente mudei para Visual Basic.Net 2005 Express Edition.

Quando utilizo uma DataGridView, nas propriedades da mesma (em Visual Studio) tenho:

- DataMember=Nome da Tabela; - DataSource=Nome do DataSet; e funciona os registos navegam entre si, o problema é quando faço o mesmo (em Visual Basic), se tiver textbox(s) os registos navegam entre si, mas já não navegam no DataGridView.

Em Visual Basic, se preencher a propriedade DataSource=NomedaTabelaBindingSource, e deixar a propriedade DataMember a vazio, ai os registos já navegam tanto nas textbox(s), como no DatagridView, o problema é que tenho uma label que me deveria identificar a posição do registo

e não o faz, fica bloqueada na primeira posição (Ex: Registo 1 de 5 registos)

P.S.: Não utilizo o BindingNavigator, mas sim 4 botões com código para navegar pelos registos.

Será que me podem ajudar?!

Desde já fico agradecido.

Cumprimentos.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

Eu não falei em VB6.

Disse que passei de VISUAL STUDIO para VISUAL BASIC.NET 2005 EXPRESS EDITION.

E o problema está em VISUAL BASIC.NET 2005 EXPRESS EDITION.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
bioshock

Visual Basic e Visual Studio são duas coisas diferentes. A primeira é uma linguagem de programação, a segunda é um IDE. Portanto, existe Visual Studio 2003/2005/2008/2010.

Visual Basic.NET é uma linguagem de programação que vai tendo novas features aquando a implementação dos novos IDE's. Aliás, o que sofre alteração é a framework (.NET).

Share this post


Link to post
Share on other sites
progster

Obrigado pelo esclarecimento, mas isso não responde ao meu problema.

Vou tentar explicar-me melhor.

Normalmente trabalho em Visual Studio.Net 2003, foi assim que aprendi, foi assim que começei a programar, e tanto por curiosidade, como pelo facto de ser parecido com o Visual Basic.Net 2005 Express Edition, decidi passar para esta plataforma.

O meu problema aplica-se em Visual Basic.Net 2005 Express Edition.

Numa aplicação em que tenho estado a trabalhar, desenvolvida em Visual Basic.Net 2005 Express Edition + Microsoft Access 2003 (Para a Base de Dados), onde tenho botões para a navegação de registos (Portanto, não estou a utilizar o BindingNavigator que aparece no topo do form) adicionei um Datagridview.

Até aqui tudo bem, outras funcionalidades incluindo Inserir/Guardar/Eliminar etc... já se encontram a funcionar.

O problema que surgiu diz respeito a navegação pelos registos da BD, ou seja, depois de adicionar a DataGridview, há que a preencher com os dados existentes na tabela da BD.

Se preencher a propriedade DataSource = NomedaTabelaBindingSource, e deixar a propriedade DataMember a vazio, (a navegação de registos processa-se tanto nas textbox's, como no DatagridView), mas para a mesma aplicação tenho uma label que me deveria identificar a posição do registo e não o faz, fica bloqueada na primeira posição (Ex: Registo 1 de 5 registos).

Ps.: Para Visual Studio.Net 2003 o problema resolvia-se preenchendo as propriedades DataSource e DataMember, o que não se aplica para a Plataforma em causa.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
progster

O código que tenho para a navegação de registos é:


Private Sub cmdNavegaPrimeiroRegisto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNavegaPrimeiroRegisto.Click
'Tal como o nome indica, este bloco de código permite voltar para o primeiro registo.
Try
   Me.ClienteBindingSource.Position = 0
   PosicaoCorrente()
  Catch Erro As Exception
   MsgBox(Erro.Message)
   Me.ClienteBindingSource.CancelEdit()
End Try
End Sub

Private Sub cmdNavegaRegistoAnterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNavegaRegistoAnterior.Click
'Tal como o nome indica, este bloco de código permite voltar para o registo anterior.
Try
   If Me.ClienteBindingSource.Position > 0 Then
      Me.ClienteBindingSource.Position = (Me.ClienteBindingSource.Position - 1)
      PosicaoCorrente()
   End If
  Catch dataException As Exception
      MsgBox(dataException.Message)
      Me.ClienteBindingSource.CancelEdit()
End Try
End Sub

Private Sub cmdNavegaRegistoSeguinte_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNavegaRegistoSeguinte.Click
'Tal como o nome indica, este bloco de código permite voltar para o registo seguinte.
Try
   If Me.ClienteBindingSource.Position < Me.ClienteBindingSource.Count Then
      Me.ClienteBindingSource.Position = (Me.ClienteBindingSource.Position + 1)
      PosicaoCorrente()
   End If
  Catch erro As Exception
      MsgBox(erro.Message)
      Me.ClienteBindingSource.CancelEdit()
End Try
End Sub

Private Sub cmdNavegaUltimoRegisto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdNavegaUltimoRegisto.Click
'Tal como o nome indica, este bloco de código permite voltar para o último registo.
Try
  Me.ClienteBindingSource.Position = Me.ClienteBindingSource.Count - 1
  PosicaoCorrente()
Catch Erro As Exception
  MsgBox(Erro.Message)
  Me.ClienteBindingSource.CancelEdit()
End Try
End Sub


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
bioshock

Presumo que o Sub PosiçãoCorrent() seja o que actualiza a Label que tanto falas.

Experimenta fazer:

Msgbox(Me.ClienteBindingSource.Position.ToString())

E vê se ele te está a devolver o valor correcto.

Share this post


Link to post
Share on other sites
progster

O código que tenho para PosicaoCorrente() é:

Private Sub PosicaoCorrente() 
  lblRegistos.Text = ((("Registo " & Me.BindingContext(Dsbd1, "Cliente").Position + 1).ToString + " de  ") + Me.BindingContext(Dsbd1, "Cliente").Count.ToString) & " registo(s)"
End Sub


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
bioshock

Que salgalhada...

Tu simplesmente não queres identificar, na Label, em que posição se encontra o registo?

Share this post


Link to post
Share on other sites
progster

Eu quero é que a Label me apresente por exemplo a seguinte msg:

(Registo 1 de 10 registos)


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
bioshock

Então, mas estás apanhar com sucesso a quantidade de registos? Se sim, o que apenas e só te falta é determinar a posição do registo corrente?

Share this post


Link to post
Share on other sites
progster

Certo. O que eu preciso é que se estiver no registo 5 de 10 registos existentes na tabela da base de dados, na label me apareça: Registo 5 de 10 registos.

Este código em Visual Studio.Net 2003, funciona bem, já o testei por diversas vezes, mas na passagem para Visual Basic.Net 2005 Express Edition a datagridview está a dar-me problemas.

Isto não terá a ver com as propriedades da datagridview, mas propriamente o datasource, e o datamember?.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites
bioshock

Hum, como estás a usar bindings não te sei dizer ao certo.

Então mas se fizeres algo do género:

Label1.Text = Me.ClienteBindingSource.Position.ToString() & Space(1) & "of" & Space(1) & Me.BindingContext(Dsbd1, "Cliente").Count.ToString

Não funciona?

Share this post


Link to post
Share on other sites
progster

;) ;) :D

Era isto mesmo. Já está a funcionar. Bolas custou mas foi.

Obrigado pela ajuda.

Cumprimentos.


Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.