Ir para o conteúdo
Chamuanza

Deslocação em DataGridView com erro

Mensagens Recomendadas

Chamuanza    3
Chamuanza

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
vbtipo    0
vbtipo

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pwyll    0
Pwyll

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pwyll    0
Pwyll

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    170
bioshock

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Chamuanza    3
Chamuanza

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Pwyll    0
Pwyll

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade