Jump to content
Bessa

Mudar Registos de ListBox's

Recommended Posts

Bessa

Boas Pessoal! ;)

Tenho aqui um problema, que já estive a procurar e hoje, e mesmo à uns dias atrás e ainda não encontrei resposta.

- Eu guardo tudo desta Form na Base de dados, e consoante os registos que guardo na Base de Dados, gostaria de navegar nos Registos, Fazendo "Seguinte" e "Anterior" e o programa ia-me atualizando as TextBox, ComboBox's e Listbox, consoante o que tinha guardado na BD para o respetivo artigo.

No Entanto, não consigo nem faço ideia de como irei fazer com que o Programa atualize as ListsBox's "As Selecionadas", consoante o que tenho na BD (As Ferramentas Corte e Posicionamento não preciso de atualizar).

Por Ex, neste caso, guardei estes dados todos na BD:

1a63.JPG

E na BD, está assim:

width=750 height=85http://img1.imagilive.com/0611/2c15.JPG[/img]

Numa situação normal de apenas TextBox's, o que faço é colocar, por ex, no "Seguinte" este código: "Ferramentas_posicionamentoBindingSource.Position += 1"

Mas neste caso, não funciona, mesmo apenas colocando no Seguinte, "Associar_ferramentasBindingSource.Position = +1", que é onde tudo está a ser guardado.

O que acontece é que apenas me atualiza a TextBox "Escolher Programa" e a ComboBox "Fases". :(

Alguém pode dar algumas luzes?

Obrigado desde já.

Share this post


Link to post
Share on other sites
Caça

Deves carregar todos os dados necessários para um DataTabe ou DataSet e depois só tens de mudar a posição da linha e mandar os dados para os controlos do formulário.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Bessa

Desculpa mas não consegui entender o que disseste.  😲

Tenta trocar isso por miúdos sff. :( Obrigado.

Share this post


Link to post
Share on other sites
Caça

Por exemplo, depois de carregares um DataTable, para colocar texto na textbox coloca isto

TextBox1.Text = Dt.Rows(0).Item("Nome").ToString()

Este código vai-te buscar o campo nome do primeiro registo.

Basicamente nos botões Primeiro, Anterior, etc., só tens de incrementar/decrementar uma variável que vais colocar em vez do 0, e depois carregas novamente o registo referente ao valor da variável, entendes?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Bessa

Mas no caso da ListBox é que não entendo...  :wallbash:

Nem o IF dá para utilizar...Por isso não estou a ver como. Como é possível que ninguém tenha tido este problema?

Tive a pesquisar no google e nada! :wallbash:

Não sabes algum palavras chave que me dê a solução? (Não pode é utilizar a palavra "Record" LOL Está Bloqueada aqui)  :(

Thanks.

Share this post


Link to post
Share on other sites
bioshock

Ao menos já puseste a funcionar como o @Caça te sugeriu? Esquece a Listbox, quando tiveres os outros controlos a funcionar direitinhos, a Listbox vem por acréscimo.

Share this post


Link to post
Share on other sites
Bessa

isso dos DataTables, da última vez que fiz, fiz desta forma, mas era para carregar para as ListBox...Para as TextBox, coloquei assim e não deu sinal de vida:

        'Descarregar todos os dados dos respetivos campos para o programa

        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From Informix_pp_gamope Where gam_codpro Like '" & Artigo_escolhidoComboBox.Text & "%'"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        'Colocar cada Dado no respetivo campo

        For i As Integer = 0 To -1

            Artigo_escolhidoComboBox.Text = Dt.Rows(i).Item("artigo_escolhido").ToString
            ProgramaTextBox.Text = Dt.Rows(i).Item("programa").ToString()
            fase_artigo.Text = Dt.Rows(i).Item("fase_artigo").ToString()

        Next

Mesmo só com a TextBox "Programa", nada.

Portanto, suponho que não é assim, né?

Entretanto, estou a experimentar uma possível (Provavelmente remota) ideia que tive, para ver se resolvo o problema...Mas não me parece que vá funcionar!  :down:

Share this post


Link to post
Share on other sites
Caça

Este ciclo é escusado

For i As Integer = 0 To -1
    Artigo_escolhidoComboBox.Text = Dt.Rows(i).Item("artigo_escolhido").ToString
    ProgramaTextBox.Text = Dt.Rows(i).Item("programa").ToString()
    fase_artigo.Text = Dt.Rows(i).Item("fase_artigo").ToString()
Next

basta isto

        If Dt.Rows.Count > 0 Then
            Artigo_escolhidoComboBox.Text = Dt.Rows(0).Item("artigo_escolhido").ToString
            ProgramaTextBox.Text = Dt.Rows(0).Item("programa").ToString()
            fase_artigo.Text = Dt.Rows(0).Item("fase_artigo").ToString()
        End If


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Bessa

Tks.  :(

Mas coloquei assim e apenas aparecia o 1º registo. Então coloquei:

        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From associar_ferramentas Where artigo_escolhido Like '" & Artigo_escolhidoComboBox.Text & "%'"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        For i As Integer = 0 To Dt.Rows.Count - 1

            Artigo_escolhidoComboBox.Text = Dt.Rows(i).Item("artigo_escolhido").ToString
            ProgramaTextBox.Text = Dt.Rows(i).Item("programa").ToString()
            fase_artigo.Text = Dt.Rows(i).Item("fase_artigo").ToString()
        Next

Mas só me mexe no 1º registo...Ou melhor, ele deteta que há um 2º mas não muda o conteúdo das textBox!

Resolvi dar uns toques no código, dado que penso que a Query SQL estava errada, porque estava a comparar um valor com uma Combo, mas agora passa diretamente para o último registo...:

        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From associar_ferramentas"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        For i As Integer = 0 To Dt.Rows.Count - 1

            Artigo_escolhidoComboBox.Text = Dt.Rows(i).Item("artigo_escolhido").ToString
            ProgramaTextBox.Text = Dt.Rows(i).Item("programa").ToString()
            fase_artigo.Text = Dt.Rows(i).Item("fase_artigo").ToString()
        Next

🤔

Share this post


Link to post
Share on other sites
Caça

O código que tens apenas vai buscar o ultimo registo que existe no DataTable, para os mostrar todos deves usar uma Grid ou outra coisa parecida.


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
Bessa

Quanto a mover os Campos "ESCOLHER ARTIGO", "FASES" e "ESCOLHER PROGRAMA", já consegui.

Era muito simples, eu é que estava a utilizar o método que fiz de uma outra vez, e desta vez tinha de usar outro!

Coloquei "Associar_ferramentasBindingSource.MoveNext" e mexe. :(

Agora, falta é descarregar o resto da Informação que está na Base de dados, nas respetivas ListBox e consoante o Nrº da Operação (1,20,15,20,25...) que está na BD, o Seleted Index ir para lá... 🤔

Como poderei descarregar para as ListBox? Que tipo de Ciclo deverei utilizar?

Obrigado.

Como é óbvio, não desisti e continuei a explorar e resolvi fazer este código:

       Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From associar_ferramentas Where artigo_escolhido Like '" & Artigo_escolhidoComboBox.Text & "%'"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        Ferramentas_corte_selecListBox.DataSource = Dt
        Ferramentas_corte_selecListBox.DisplayMember = "ferramentas_corte_selec"
        Ferramentas_corte_selecListBox.Refresh()
        Comprimento_ferr_corteListBox.DataSource = Dt
        Comprimento_ferr_corteListBox.DisplayMember = "comprimento_ferr_corte"
        Comprimento_ferr_corteListBox.Refresh()
        Diametro_ferr_corteListBox.DataSource = Dt
        Diametro_ferr_corteListBox.DisplayMember = "diametro_ferr_corte"
        Diametro_ferr_corteListBox.Refresh()
        Ferramentas_posic_selecListBox.DataSource = Dt
        Ferramentas_posic_selecListBox.DisplayMember = "ferramentas_posic_selec"
        Ferramentas_posic_selecListBox.Refresh()
        X_ferr_posListBox.DataSource = Dt
        X_ferr_posListBox.DisplayMember = "x_ferr_pos"
        X_ferr_posListBox.Refresh()
        Y_ferr_posListBox.DataSource = Dt
        Y_ferr_posListBox.DisplayMember = "y_ferr_pos"
        Y_ferr_posListBox.Refresh()
        Z_ferr_posListBox.DataSource = Dt
        Z_ferr_posListBox.DisplayMember = "z_ferr_pos"
        Z_ferr_posListBox.Refresh()

E já me aparece os dados, agora vou só ver outra vez com atenção a ver se tem algum problema. :P

Resolvi só avisar já, para que saibam o meu ponto se situação.

Share this post


Link to post
Share on other sites
Bessa

PONTO DE SITUAÇÃO

Já consegui pôr todos os registos a moverem! Incluindo as ListBox :P

Coloquei este Código no SEGUINTE:

        Ferramentas_corte_selecListBox.DataSource = Nothing
        Comprimento_ferr_corteListBox.DataSource = Nothing
        Diametro_ferr_corteListBox.DataSource = Nothing
        Ferramentas_posic_selecListBox.DataSource = Nothing
        X_ferr_posListBox.DataSource = Nothing
        Y_ferr_posListBox.DataSource = Nothing
        Z_ferr_posListBox.DataSource = Nothing

        Ferramentas_corte_selecListBox.Enabled = False
        Comprimento_ferr_corteListBox.Enabled = False
        Diametro_ferr_corteListBox.Enabled = False
        Ferramentas_posic_selecListBox.Enabled = False
        X_ferr_posListBox.Enabled = False
        Y_ferr_posListBox.Enabled = False
        Z_ferr_posListBox.Enabled = False

        Associar_ferramentasBindingSource.MoveNext()

        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From associar_ferramentas Where artigo_escolhido Like '" & Artigo_escolhidoComboBox.Text & "%'"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        Ferramentas_corte_selecListBox.DataSource = Dt
        Ferramentas_corte_selecListBox.DisplayMember = "ferramentas_corte_selec"
        Ferramentas_corte_selecListBox.Refresh()
        Comprimento_ferr_corteListBox.DataSource = Dt
        Comprimento_ferr_corteListBox.DisplayMember = "comprimento_ferr_corte"
        Comprimento_ferr_corteListBox.Refresh()
        Diametro_ferr_corteListBox.DataSource = Dt
        Diametro_ferr_corteListBox.DisplayMember = "diametro_ferr_corte"
        Diametro_ferr_corteListBox.Refresh()
        Ferramentas_posic_selecListBox.DataSource = Dt
        Ferramentas_posic_selecListBox.DisplayMember = "ferramentas_posic_selec"
        Ferramentas_posic_selecListBox.Refresh()
        X_ferr_posListBox.DataSource = Dt
        X_ferr_posListBox.DisplayMember = "x_ferr_pos"
        X_ferr_posListBox.Refresh()
        Y_ferr_posListBox.DataSource = Dt
        Y_ferr_posListBox.DisplayMember = "y_ferr_pos"
        Y_ferr_posListBox.Refresh()
        Z_ferr_posListBox.DataSource = Dt
        Z_ferr_posListBox.DisplayMember = "z_ferr_pos"
        Z_ferr_posListBox.Refresh()

Coloquei este Código no ANTERIOR:

  Ferramentas_corte_selecListBox.DataSource = Nothing
        Comprimento_ferr_corteListBox.DataSource = Nothing
        Diametro_ferr_corteListBox.DataSource = Nothing
        Ferramentas_posic_selecListBox.DataSource = Nothing
        X_ferr_posListBox.DataSource = Nothing
        Y_ferr_posListBox.DataSource = Nothing
        Z_ferr_posListBox.DataSource = Nothing

        Ferramentas_corte_selecListBox.Enabled = False
        Comprimento_ferr_corteListBox.Enabled = False
        Diametro_ferr_corteListBox.Enabled = False
        Ferramentas_posic_selecListBox.Enabled = False
        X_ferr_posListBox.Enabled = False
        Y_ferr_posListBox.Enabled = False
        Z_ferr_posListBox.Enabled = False

        Associar_ferramentasBindingSource.MovePrevious()

        Dim cn As New System.Data.OleDb.OleDbConnection
        Dim cm As New System.Data.OleDb.OleDbCommand

        cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Application.StartupPath & "\bdfelino.accdb"

        cm.Connection = cn
        cm.CommandText = "Select * From associar_ferramentas Where artigo_escolhido Like '" & Artigo_escolhidoComboBox.Text & "%'"

        Dim Adp As New OleDbDataAdapter(cm)
        Dim Dt As New DataTable

        Adp.Fill(Dt)

        Ferramentas_corte_selecListBox.DataSource = Dt
        Ferramentas_corte_selecListBox.DisplayMember = "ferramentas_corte_selec"
        Ferramentas_corte_selecListBox.Refresh()
        Comprimento_ferr_corteListBox.DataSource = Dt
        Comprimento_ferr_corteListBox.DisplayMember = "comprimento_ferr_corte"
        Comprimento_ferr_corteListBox.Refresh()
        Diametro_ferr_corteListBox.DataSource = Dt
        Diametro_ferr_corteListBox.DisplayMember = "diametro_ferr_corte"
        Diametro_ferr_corteListBox.Refresh()
        Ferramentas_posic_selecListBox.DataSource = Dt
        Ferramentas_posic_selecListBox.DisplayMember = "ferramentas_posic_selec"
        Ferramentas_posic_selecListBox.Refresh()
        X_ferr_posListBox.DataSource = Dt
        X_ferr_posListBox.DisplayMember = "x_ferr_pos"
        X_ferr_posListBox.Refresh()
        Y_ferr_posListBox.DataSource = Dt
        Y_ferr_posListBox.DisplayMember = "y_ferr_pos"
        Y_ferr_posListBox.Refresh()
        Z_ferr_posListBox.DataSource = Dt
        Z_ferr_posListBox.DisplayMember = "z_ferr_pos"
        Z_ferr_posListBox.Refresh()

No entanto, ainda tenho 2 Problemas:

- Consoante o Nrº da Operação (1,20,15,20,25...) que está na BD, o SelectedIndex não vai para o respetivo número, fica sempre no 1º (5)!;

- Na TextBox do Programa do 1º Artigo, nada me aparece! Atualiza o Nrº da fase e as ListBox, mas o Programa não. E mesmo que faça "Anterior", não me é atualizada a TextBox do PRIMEIRO artigo! Que será?

A Partir do 2º Artigo, atualiza tudo bem.

Obrigado desde já. :(

Share this post


Link to post
Share on other sites
bioshock

Isso vai ser sempre um problema. Se já tivesses dito que estás a trabalhar com bindingSources já te teria dado a resposta. Não existe incompatibilidade em utilizar bindingSources e código escrito totalmente à-lá-mão, mas torna-se problemático em alguns aspectos, pois precisas de arranjar outras alternativas ao que seria simples.

Share this post


Link to post
Share on other sites
Bessa

1º PROBLEMA RESOLVIDO

:) :)

Estive aqui a explorar uma ideia que tive, apliquei-a e fiquei com o problema do SelectedIndex não ir para o respetivo número, RESOLVIDO. :) Mas só funciona, com quem tem poucos dados...No meu caso, como no máximo tenho até ao Nrº 70 e a Operação é 5 em 5 (Op5, Op 10, Op 15), valeu a pena fazer por este método.

- Criei uma ListBox à Parte, e coloquei Oculta;

- Criei um Ciclo IF simples e coloquei-o nos botões SEGUINTE e ANTERIOR:

If ListBox2.Text = "5" Then
            Operacao_artigoListBox.SelectedIndex = 0
        Else
            If ListBox2.Text = "10" Then
                Operacao_artigoListBox.SelectedIndex = 1
            Else
                If ListBox2.Text = "15" Then
                    Operacao_artigoListBox.SelectedIndex = 2
                Else
'E coloca-se o resto...

Dá para a fazer com o ElseIF também...Mas como já tinha feito assim, assim ficou! :D

Quanto ao outro problema, mesmo fazendo desta form, não funcionou! Não cola o 1º Registo na TextBox... :wallbash:

Vai ficar SOLVED o Tópico, caso necessite mesmo de corrigir este pequenino BUG, venho aqui... :P

No entanto, Obrigado a todos. :)

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

×
×
  • 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.