none
Ajuda! Carregar dados especificos do BD para botoes/datagrid RRS feed

  • Pergunta

  • Ola pessoal! Vb.net

    Estou com um banco de dados que contem uma coluna ITEM e outra coluna STATUS.
    A coluna ITEM tera numeros inteiros sendo que podera ser repetido o numero em outras linhas.
    A coluna STATUS tera somente 2 valores diferentes: podera ser FECHADO ou PENDENTE. Exemplo:

    Coluna Item            Coluna Status

    35                           PENDENTE
    35                           PENDENTE
    36                           FECHADO
    37                           PENDENTE
    37                           PENDENTE
    37                           PENDENTE
    37                           PENDENTE
    38                           FECHADO
    38                           FECHADO
    39                           FECHADO
    40                           PENDENTE
    41                           FECHADO
    42                           PENDENTE
    42                           PENDENTE
    43                           FECHADO

    Tenho um form com 30 botoes (Nao terei mais do que 30 itens com status PENDENTE)

    Parte 1 do dilema:

    Muito bem, com base nessas informacoes, eu gostaria de tudo o que estivesse com o status PENDENTE automaticamente preencheria cada botao com seu respectivo numero. Tomando como exemplo a "tabela" acima ficaria:

    Botao 1 com o rotulo: 35

    Botao 2 com o rotulo: 37

    Botao 3 com o rotulo: 40

    Botao 4 com o rotulo: 42


    Parte 2 do dilema:

    E quando eu clicar no botao, todas as linhas do banco de dados correspondentes ao numero do botao serao adicionadas a um datagrid e devera remover esse dado do banco de dados.


    • Editado MRD2018 terça-feira, 6 de março de 2018 04:35 Linguagem Vb.net
    terça-feira, 6 de março de 2018 04:21

Respostas

  • Ok, coloquei os neuronios para funcionar e consegui resolver esse dilema com o seguinte codigo:

    Dim I As Integer = 0

                    For I = 0 To dgvCheck.Rows.Count - 1

                        For Each btn As Control In Me.Controls
                            If TypeOf (btn) Is Button Then
                                If btn.Name = "btnCheck" & I + 1 Then
                                    btn.Text = dgvCheck.Rows(I).Cells(0).Value
                                    btn.Visible = True
                                End If
                            End If
                        Next
                    Next

    • Marcado como Resposta MRD2018 quarta-feira, 28 de março de 2018 02:53
    quarta-feira, 28 de março de 2018 02:52

Todas as Respostas

  • Bom dia Lucio,

    Obrigado.

    Se trata de um sistema de comandas para restaurantes, nada muito complexo. Mas estou armazenando na tabela os itens da comanda e identificando todos os itens com o numero do recibo que seria a coluna Item. As comandas que foram cobradas sao as que estao sendo armazenadas com o status: FECHADO e as que estao em aberto sao as que estao com status PENDENTE. E que podem ser reabertas e exibidas no datagrid para cobranca ou para adicionar mais itens e novamente armazenar na tabela. Tenho um botao Reabri comanda que chama o form onde estao os botoes, que devera exibir o numero de cada recibo em aberto (PENDENTE), e clicando no botao os itens daquele recibo sao enviados ao datagrid.

    Obrigado pela ajuda e se precisar de mais informacoes eu posto aqui.

    Marcio Duo

    terça-feira, 6 de março de 2018 15:16
  • Ola Lucio, desculpe a demora.

    Como eu comentei acima, esta funcionando bem para os recibos que sao abertos e pagos logo e seguida, porem como eu comentei acima, gostaria de armazenar os recibos em abertos (Os que nao foram pagos ainda), como se a mesa do restaurante ainda estivesse com as pessoas ordenando bebidas ou outros itens e esses recibos podem ser reabertos posteriormente tanto para agregar mais itens como tambem para serem finalizados e pagos.

    Segue abaixo o codigo que estou usando para inserir os dados nas tabelas por SQLite:

    Public Sub AdicionarTransacao()
            Dim Transacao As SQLiteTransaction
            Try
                Dim cn As SQLiteConnection = GetConnectionSQLite()
                cn.Open()
                Transacao = cn.BeginTransaction

                Dim sql As String = "insert into tblRecibos (DataRecibo, TotalRecibo) Values (@DataRecibo, @TotalRecibo)"
                Dim cmd As New SQLiteCommand
                cmd.Connection = cn
                cmd.Transaction = Transacao
                cmd.CommandText = sql
                cmd.Parameters.AddWithValue("@DataRecibo", Now.Date)
                cmd.Parameters.AddWithValue("@TotalRecibol", txtTotal.Text)
                cmd.ExecuteNonQuery()
                cmd.Dispose()

                sql = "select max(ReciboID) as MAXID from tblRecibos"
                Dim cmd2 As New SQLiteCommand
                cmd2.Connection = cn
                cmd2.Transaction = MyTransaction
                cmd2.CommandText = sql
                Dim ReciboID As Long = cmd2.ExecuteScalar()
                cmd2.Dispose()

                Dim I As Integer
                For I = 0 To dgvCheck.Rows.Count - 1

                        Dim Descricao As String = dgvCheck.Rows(I).Cells(0).Value
                        Dim QTY As Integer = dgvCheck.Rows(I).Cells(1).Value
                        Dim Preco As Decimal = dgvCheck.Rows(I).Cells(2).Value
                        Dim Taxa As Decimal = dgvCheck.Rows(I).Cells(3).Value
                        Dim Total As Decimal = dgvCheck.Rows(I).Cells(4).Value
                        Dim Departamento As String = dgvCheck.Rows(I).Cells(5).Value

                        Dim cmd3 As New SQLiteCommand

                    sql = "insert into tblReciboDetalhe (ReciboID, Descricao, Departamento, QTY, Preco, Taxa, DataRecibo) Values (@ReciboID, @Descricao, @Departamento, @QTY, @Preco, @Taxa, @DataRecibo)"
                        cmd3.Connection = cn
                        cmd3.Transaction = Transacao
                        cmd3.CommandText = sql
                        cmd3.Parameters.AddWithValue("@ReciboID", ReciboID)
                        cmd3.Parameters.AddWithValue("@Descricao", Descricao)
                        cmd3.Parameters.AddWithValue("@Departamento", Departamento)
                        cmd3.Parameters.AddWithValue("@QTY", QTY)
                        cmd3.Parameters.AddWithValue("@Preco", Preco)
                        cmd3.Parameters.AddWithValue("@Taxa", Taxa)
                        cmd3.Parameters.AddWithValue("@DataRecibo", Now.Date)
                        cmd3.ExecuteNonQuery()
                        cmd3.Dispose()
                    'End If
                Next
           
                Transacao.Commit()
                Transacao.Dispose()
                cn.Close()
                cn.Dispose()

            Catch ex As Exception
                If Transacao IsNot Nothing Then
                    Transacao.Rollback()
                End If
                MsgBox(ex.Message, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "Test")
            End Try
        End Sub

    Obrigado pela ajuda!

    quinta-feira, 8 de março de 2018 16:56
  • Ola Lucio, desculpe a demora.

    Como eu comentei acima, esta funcionando bem para os recibos que sao abertos e pagos logo e seguida, porem como eu comentei acima, gostaria de armazenar os recibos em abertos (Os que nao foram pagos ainda), como se a mesa do restaurante ainda estivesse com as pessoas ordenando bebidas ou outros itens e esses recibos podem ser reabertos posteriormente tanto para agregar mais itens como tambem para serem finalizados e pagos.

    Segue abaixo o codigo que estou usando para inserir os dados nas tabelas por SQLite:

    Public Sub AdicionarTransacao()
            Dim Transacao As SQLiteTransaction
            Try
                Dim cn As SQLiteConnection = GetConnectionSQLite()
                cn.Open()
                Transacao = cn.BeginTransaction

                Dim sql As String = "insert into tblRecibos (DataRecibo, TotalRecibo) Values (@DataRecibo, @TotalRecibo)"
                Dim cmd As New SQLiteCommand
                cmd.Connection = cn
                cmd.Transaction = Transacao
                cmd.CommandText = sql
                cmd.Parameters.AddWithValue("@DataRecibo", Now.Date)
                cmd.Parameters.AddWithValue("@TotalRecibol", txtTotal.Text)
                cmd.ExecuteNonQuery()
                cmd.Dispose()

                sql = "select max(ReciboID) as MAXID from tblRecibos"
                Dim cmd2 As New SQLiteCommand
                cmd2.Connection = cn
                cmd2.Transaction = MyTransaction
                cmd2.CommandText = sql
                Dim ReciboID As Long = cmd2.ExecuteScalar()
                cmd2.Dispose()

                Dim I As Integer
                For I = 0 To dgvCheck.Rows.Count - 1

                        Dim Descricao As String = dgvCheck.Rows(I).Cells(0).Value
                        Dim QTY As Integer = dgvCheck.Rows(I).Cells(1).Value
                        Dim Preco As Decimal = dgvCheck.Rows(I).Cells(2).Value
                        Dim Taxa As Decimal = dgvCheck.Rows(I).Cells(3).Value
                        Dim Total As Decimal = dgvCheck.Rows(I).Cells(4).Value
                        Dim Departamento As String = dgvCheck.Rows(I).Cells(5).Value

                        Dim cmd3 As New SQLiteCommand

                    sql = "insert into tblReciboDetalhe (ReciboID, Descricao, Departamento, QTY, Preco, Taxa, DataRecibo) Values (@ReciboID, @Descricao, @Departamento, @QTY, @Preco, @Taxa, @DataRecibo)"
                        cmd3.Connection = cn
                        cmd3.Transaction = Transacao
                        cmd3.CommandText = sql
                        cmd3.Parameters.AddWithValue("@ReciboID", ReciboID)
                        cmd3.Parameters.AddWithValue("@Descricao", Descricao)
                        cmd3.Parameters.AddWithValue("@Departamento", Departamento)
                        cmd3.Parameters.AddWithValue("@QTY", QTY)
                        cmd3.Parameters.AddWithValue("@Preco", Preco)
                        cmd3.Parameters.AddWithValue("@Taxa", Taxa)
                        cmd3.Parameters.AddWithValue("@DataRecibo", Now.Date)
                        cmd3.ExecuteNonQuery()
                        cmd3.Dispose()
                    'End If
                Next
           
                Transacao.Commit()
                Transacao.Dispose()
                cn.Close()
                cn.Dispose()

            Catch ex As Exception
                If Transacao IsNot Nothing Then
                    Transacao.Rollback()
                End If
                MsgBox(ex.Message, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "Test")
            End Try
        End Sub

    Obrigado pela ajuda!

    sexta-feira, 9 de março de 2018 17:51
  • Obrigado Lucio, irei rever a modelagem aqui, mas deixarei aberto o assunto, e assim que conseguir mover marco a resposta.
    quarta-feira, 14 de março de 2018 01:17
  • Um outro detalhe eh que mesmo colocando em ordem a modelagem, eu ainda terei o mesmo problema em reabrir todos os itens cadastrados no recibo com status em aberto e apresenta-los no datagrid. E tambem o segundo problem que eu gostaria de em um form separado ter 30 botoes onde seriam preenchidos automaticamente com o numero dos recibos de status em aberto e clicando nos botoes aconteceria o carregamento dos itens para o datagrid.
    quarta-feira, 14 de março de 2018 01:55
  • Lucio, boa noite!

    Acertei a modelagem de dados e realmente funcionou! Obrigado.

    Agora me falta somente popular os botoes com os registros que tenham o status como PENDENTE.

    Tenho 30 botoes e poderei ter ate 30 recibos em aberto, preciso somente ter o numero do recibo nos botoes.

    Exemplo:

    - Tenho apenas 3 recibos com status PENDENTE (Recibo numero 11, Recibo numero 21 e Recibo numero 52)

    - O text dos 3 primeiros botoes seria os respectivos numeros de cada recibo.

    Os demais (27 botoes) teriam o text em branco ou simplismente visible=false.

    Poderia me ajudar com essa parte do codigo?

    Penso em um For com a seguinte estrutura:

    For Each btn As Control In Me.Controls

          If TypeOf (btn) Is Button Then

     

    E dai pra frente nao sei mais o que fazer rsrsrs

    Nao creio que estou pensando na estrutura correta. 

    quarta-feira, 28 de março de 2018 02:08
  • Ok, coloquei os neuronios para funcionar e consegui resolver esse dilema com o seguinte codigo:

    Dim I As Integer = 0

                    For I = 0 To dgvCheck.Rows.Count - 1

                        For Each btn As Control In Me.Controls
                            If TypeOf (btn) Is Button Then
                                If btn.Name = "btnCheck" & I + 1 Then
                                    btn.Text = dgvCheck.Rows(I).Cells(0).Value
                                    btn.Visible = True
                                End If
                            End If
                        Next
                    Next

    • Marcado como Resposta MRD2018 quarta-feira, 28 de março de 2018 02:53
    quarta-feira, 28 de março de 2018 02:52