• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Chamuanza

Deslocação em DataGridView com erro

18 mensagens neste tópico

Oi pessoal estou  :wallbash: já não sei o que fazer

Estou a criar uma pequena aplicação de despesas pessoais

Sucede que quando faço a deslocação do ponteiro na grid de registo em registo e embora tenha um campo "ID" com chave primaria os valores não estão certos

Mando imagem para verificarem a situação de maneira que me possam ajudar, estou pelos cabelos, já não sei o que fazer.

despesasfamilia3.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com a chave Primaria, quando tu apagas um ou vários registos, ele nunca vai buscar esse valores deve ser um caso deste que está-te acontecer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tambem acho que isto tem  a ver com o index da chave primaria, mas o que posso fazer?

enquanto estou a criar a aplicação vou inserindo registos e apagando para testar as rotinas que vou criando, mas isto tem-me vindo a suceder mais vezes, e já não sei o que fazer.

Sinceramente já pensei em desistir, mas tambem sou teimoso, e espero que aqui no forum alguem me possa ajudar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Uiiiii, Medo :) Nem nunca usei essas coisas do demo, mas vamos la tentar indicar um caminho.

Pelo que vejo na imagem a informação que tens na grid é a mesma que tens no form, logo a unica coisa que tens que fazer e no evento selection_change da grid, leres o conteudo do selectionItem e colocares nos respectivos campos do form.

De qualquer das formas nao percebo a intenção de teres um form com a mesma informacao da grid, pois podes sempre fazer inline edit.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi Pwyll

Se reparares bem enquanto na grid está o registo com Id=684 na cx na form o registo corresponde ao ID 684. Ora era suposto que quando corro os registos na grid o mesmo registo aparece na cx. de texto do form, e não está a suceder.

È esta diferença que não entendo. Isto quer dizer penso eu que o index da BD está corrompido ou que existe qualquer outro problema.

Quanto a tua dica se poderes dar um exemplo agradecia

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi Pwyll

Ao transcrever o valor de ID repeti o mesmo valor nas duas situações o que não corresponde a verdade, como podes verificar - por isso esta correção

Se reparares bem enquanto na grid está o registo com Id=684 na cx na form o registo corresponde ao ID 681. Ora era suposto que quando corro os registos na grid o mesmo registo aparece na cx. de texto do form, e não está a suceder.

È esta diferença que não entendo. Isto quer dizer penso eu que o index da BD está corrompido ou que existe qualquer outro problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse problema provém da Base de dados, creio eu, pois já tive o mesmo problema e lembro-me vagamento de o descobrir através da Base de dados.

Verifica se os campos/ligações estão correctas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, eu percebo que quando mudas de linha o form nao vai buscar o registo da linha seleccionada da grid,  isso tem a ver com o dataset que criaste e com o databinding que esta a ser feito.

Atribuis o datasource a datagrid e tens os resultados na datagrid, para preencheres o form propriamente dito fazes algo deste genero.

    Private Sub DataGridView1_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.SelectionChanged
        If DataGridView1.Rows.Count > 1 Then
            TextBox1.Text = DataGridView1.SelectedRows(0).Cells(0).Value
        End If
end sub

em que o cells(0) e o indice da coluna.

Podes sempre por cells("nomedacoluna")

De qualquer das formas, continuo a achar que nao faz muito sentido teres os dados na datagrid e no form, visto que o datasource é o mesmo.

Ja agora nas propriedades da grid, existe uma (SelectionMode) que nesse caso deve estar como FullRowSelect.

Espero que isto ajude

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi Pwyll

Fiz as alteraçoes porpostas e resultou em parte

(vb.net)  Try

            If PrincipalDataGridView.Rows.Count > 1 Then
                IdTextBox.Text = PrincipalDataGridView.SelectedRows(0).Cells(0).Value
                DesignacaoTextBox.Text = PrincipalDataGridView.SelectedRows(0).Cells(2).Value
                DespesaTextBox.Text = Format(Convert.ToDecimal(PrincipalDataGridView.SelectedRows(0).Cells(3).Value), "##,##0.00 €")
                DepositoTextBox.Text = Format(Convert.ToDecimal(PrincipalDataGridView.SelectedRows(0).Cells(4).Value), "##,##0.00 €")
                BalancoTextBox.Text = Format(Convert.ToDecimal(PrincipalDataGridView.SelectedRows(0).Cells(5).Value), "##,##0.00 €")


            End If

        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        End Try

só que ao adicionar um novo registo como adiciona logo uma nova linha aparece o erro

Conversion from type 'DBNull' to type 'String' is not valid.

por outro lado quando desloco o ponteito com o botão MoveNext do primeiro p/ o ultimo registo funciona bem, se o faço com o botão MovePrevious do ultimo para o primeiro quando chega ao 5º registo salta para o 1º.

Será melhor começar tudo de novo e sem recorrer ao wizard, só com código?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O teu problema está na base de dados, tenho quase a certeza, não tem nada haver com o wizard.

Eu utilizo o wizard e sempre correu tudo bem.

Além de que, no wizard, também podes utilizar código unha a unha.

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tambem penso assim

Face a isso, o que achas que devo fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de verificar as ligações dos campos, assim como os tipos de dados de cada campo/chaves primárias/chaves extrangeiras.

Tens aí qualquer problema em relação ao ID. Supostamente, esse campo, tem que estar com o Tipo de dados: Númeração Automática.

Pois sempre que adicionas uma Nova/o Receita/Registo ele automaticamente adiciona-te o ID.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Chamuanza, aproveitei e fiz uma coisa muito simples.

http://www.megaupload.com/?d=MCW2SLJG

Aí está a Base de dados mais uma mini mini Aplicação com Wizard.

Isso aí funciona para o que tu queres, ou seja, seleccionas na DataGrid e aparece em baixo nas Textboxs.

OBS: Futuros bugs, não ligues, fiz isso mesmo à pressa, mas testei o que interessava e funcionou.

OBS1: Fiz com Microsoft Visual Studio 2008 e a Base de dados está em Access.

Cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De facto está com

Data Type=Int

Condensed data type=int

identity specification=Yes

(is identity)=yes

identity increment=1

identity seed=1

not for replication=no

Base Dados que tenho é em SQLServer

e quando adiciono um novo registo o Id é incrementado de 1

No espaço de te responder enviaste um ficheiro que desde já agradeço e vou verificar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pela atenção

Embora não funcione na minha maq.por falta do Access 12, da-me o erro The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine.

De qualquer das maneiras vou tentar fazer em Access 2003, talvez oproblema esteja no SQLserver2005

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sorry so agora responder, mas as vezes nao tenho muito tempo :S

Começo a estar de acordo que deve haver um problema com a base de dados sim. Calculo que os wizards funcionem (pelo menos sem estes bugs).

Ainda não vi o projecto que o bioshock enviou mas de certeza que com um exemplo a funcionar consegues resolver o problema. Casos destes muitas das vezes e preciso ver realmente o codigo e fazer debug para saber exactamente o que esta a acontecer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora