none
Incluir mais de uma linha num DataGridView RRS feed

  • Pergunta

  • Boa tarde!

    Como faço para incluir mais de uma linha num DataGridView? Pode ser que eu já tenha incluído algum registro na tabela, e como fazer para não incluir novamente? Estou usando vb net 2015, bd  sql server 2012. Uma dica por favor! Obrigado

    Meu código está assim:

    Private Sub btnIFamilia_Click(sender As Object, e As EventArgs) Handles btnIFamilia.Click
        InserirFamilares()
        CarregarGrCompFam()
        Me.txtRendaF.Text = CalcularValorTotal().ToString("c")
        End Sub

        Private Sub InserirFamilares()
        Try
    For i As Integer = 0 To Me.dgvCompFam.Rows.Count - 2
        mCli = Val(Me.txtCod.Text) 
        mNome = Me.dgvCompFam.Rows(i).Cells(0).Value
        mDtNascX = Me.dgvCompFam.Rows(i).Cells(1).Value
        If mDtNascX <> " " Then
        datatmp = Convert.ToDateTime(mDtNascX)
        data = datatmp.Year.ToString & "-" & datatmp.Month.ToString & "-" & datatmp.Day.ToString
        mDtNascX = data
        Else
        mDtNascX = "Null"
        End If
        mParente = Me.dgvCompFam.Rows(i).Cells(2).Value
        mProfis = Me.dgvCompFam.Rows(i).Cells(3).Value
        mOcupc = Me.dgvCompFam.Rows(i).Cells(4).Value
        mRend = Me.dgvCompFam.Rows(i).Cells(5).Value
        mFatorR = Me.dgvCompFam.Rows(i).Cells(6).Value
        Next
        acc.IncluirFamiliares(mCli, mNome, mDtNascX, mParente, mProfis, mOcupc, mRend, mFatorR)
        MsgBox("Dados Salvos com sucesso!")

        Catch ex As Exception
        MessageBox.Show("Erro do Específico: " & ex.Message)
        End Try
        End Sub

    Na minha classe onde adiciono os registros:

    Public Sub IncluirFamiliares(ByVal idUsu As Integer, NomeFamiliar As String, ByVal dt_NascF As DateTime, ByVal Parentesco As String, ByVal Profissao As String, ByVal Ocupacao As String, ByVal Renda As Double, ByVal FatorRiscoSocial As String)
        Try
        cn = getConexaoDB()
        Cmd.Connection = cn
        Cmd.CommandText = "INSERT CompFamilias (id_Usuario, NomeFamiliar, DtNascF, Parentesco, Profissao, Ocupacao, Renda, FatorRiscoSocial)" &
        "VALUES(@idUsu, @NomeFamiliar,@DtNascF, @Parentesco, @Profissao, @Ocupacao, @Renda, @FatorRiscoSocial)"
        Cmd.Parameters.Add(New SqlParameter("@idUsu", SqlDbType.Int)).Value = idUsu
        Cmd.Parameters.Add(New SqlParameter("@NomeFamiliar", SqlDbType.NVarChar)).Value = NomeFamiliar
        Cmd.Parameters.Add(New SqlParameter("@DtNascF", SqlDbType.DateTime)).Value = dt_NascF
        Cmd.Parameters.Add(New SqlParameter("@Parentesco", SqlDbType.NVarChar)).Value = Parentesco
        Cmd.Parameters.Add(New SqlParameter("@Profissao", SqlDbType.NVarChar)).Value = Profissao
        Cmd.Parameters.Add(New SqlParameter("@Ocupacao", SqlDbType.NVarChar)).Value = Ocupacao
        Cmd.Parameters.Add(New SqlParameter("@Renda", SqlDbType.Money)).Value = Renda
        Cmd.Parameters.Add(New SqlParameter("@FatorRiscoSocial", SqlDbType.NVarChar)).Value = FatorRiscoSocial
        Cmd.ExecuteNonQuery()
        Cmd.CommandText = ""
        Catch ex As Exception
        Throw ex
        Finally
        closeConexaoDB(cn)
        End Try
        End Sub          

    Se eu inserir um registro só inclui, mas como faço para incluir os demais?????

        

    helio Passos

    segunda-feira, 1 de agosto de 2016 21:03

Respostas

  • Oi amigo eu também estava com essa dúvidas dias atrás, mas com a ajuda do pessoal aqui eu consegui resolver e vou passar pra você!

    O meu código talvez possa te auxiliar

     Public Sub AdicionarNaLista() 'Adicionar Lista no DataGrid'
    
          
       Dim vData As String     
       Dim vHora As String
            Dim vOS As String
            Dim vPart As String
            Dim vSerial As String
            Dim vBilling As String
            Dim vServico As String
            Dim vDescricao As String
    
            vData = frm_cadastro.mskData.Text
            vHora = frm_cadastro.mskTime.Text
            vOS = frm_cadastro.mskOS.Text
            vPart = frm_cadastro.txtPart.Text
            vSerial = frm_cadastro.txtSerial.Text
            vBilling = frm_cadastro.mskBilling.Text
            vServico = frm_cadastro.txtServico.Text
            vDescricao = frm_cadastro.lblDescricao.Text
    
           
                frm_cadastro.DataGrid1.Rows.Add(vData, vOS, vPart, vBilling, vSerial, vServico, vDescricao, vHora)
            
            
    
        End Sub

    Agora o código que vai verificar os itens incluidos no Datagrid, você precisa fazer um laço que percorra todas as linhas do datagrid, e amarrar com um valor primário, por exemplo, se você for fazer um cadastro de produtos, existe apenas um código para identificar o produto...e se você inserir ele várias vezes com o mesmo código pode bugar o esquema, então o trivial seria fazer uma verificação com uma variável Booleana, vamos no código abaixo:

    Public Sub VerificarLista()
    'Aqui ele vai passar por todas as linhas'
            Dim existe As Boolean = False 'Aqui ele verifica'
            For Each dgv As DataGridViewRow In frm_cadastro.DataGrid1.Rows
                If dgv.Cells(2).Value = frm_cadastro.txtPart.Text Then
                    existe = True 'Se os dados conter igual há um valor que foi digitado em uma caixa de texto ele sinaliza verdadeiro'
                End If
            Next'Proximo passo'
    'Veririficar quando for verdadeiro'
            If existe = True Then
                MsgBox("Item já está incluso") 'Se o item existe ele apresenta a mensagem'
            ElseIf existe = False Then
                AdicionarNaLista() 'Caso ao contrário aqui ele adiciona o item na lista'
    
            End If
    
        End Sub

    Eis o código pronto!

    Se você quiser inserir os dados no banco de dados eu fiz dessa forma:

    Primeiro eu fiz o meu datagrid aparecer as colunas de forma de código:

     Public Sub CarregarGrid()
            frm_cadastro.dgvInsert.ColumnCount = 8
            frm_cadastro.dgvInsert.Columns(0).Name = "Data"
            frm_cadastro.dgvInsert.Columns(1).Name = "OS"
            frm_cadastro.dgvInsert.Columns(2).Name = "Part"
            frm_cadastro.dgvInsert.Columns(3).Name = "Billing"
            frm_cadastro.dgvInsert.Columns(4).Name = "Serial"
            frm_cadastro.dgvInsert.Columns(5).Name = "Serviço"
            frm_cadastro.dgvInsert.Columns(6).Name = "Descrição"
            frm_cadastro.dgvInsert.Columns(7).Name = "Hora"
    
    
    
    
        End Sub

    Depois desse passo eu fiz a função de AdicionarNaLista(), depois disso fiz a VerificarLista() e agora pra salvar no banco de dados eu fiz assim:

    For i = 0 To frm_cadastro.dgvInsert.Rows.Count - 2
                Dim sql As String = "INSERT INTO Reparo (Data, OS, Part, Billing, Serial, Servico, Descricao, Hora) VALUES ('" & frm_cadastro.dgvInsert.Item("Data", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("OS", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Part", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Billing", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Serial", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Serviço", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Descrição", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Hora", i).Value & "')"
    
                Dim scmd As New OleDbCommand(sql, conexao_access)
                conexao_access.Open()
                scmd.ExecuteNonQuery()
                conexao_access.Close()
    
            Next
    
            MsgBox("Salvo com Sucesso!")
            frm_cadastro.dgvInsert.Rows.Clear()
    
            Limpar()

    Agora é só utilizar o exemplo e aplicar em seu desenvolvimento, espero ter ajudado!

    Forte abraço e sucesso!


    terça-feira, 2 de agosto de 2016 15:05

Todas as Respostas

  • Bom dia HelioPassos,

    Obrigado por sua participação no Fórum MSDN?

    O que você precisar é continuar inserindo mais registros após o primeiro, correto?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 2 de agosto de 2016 15:03
    Moderador
  • Oi amigo eu também estava com essa dúvidas dias atrás, mas com a ajuda do pessoal aqui eu consegui resolver e vou passar pra você!

    O meu código talvez possa te auxiliar

     Public Sub AdicionarNaLista() 'Adicionar Lista no DataGrid'
    
          
       Dim vData As String     
       Dim vHora As String
            Dim vOS As String
            Dim vPart As String
            Dim vSerial As String
            Dim vBilling As String
            Dim vServico As String
            Dim vDescricao As String
    
            vData = frm_cadastro.mskData.Text
            vHora = frm_cadastro.mskTime.Text
            vOS = frm_cadastro.mskOS.Text
            vPart = frm_cadastro.txtPart.Text
            vSerial = frm_cadastro.txtSerial.Text
            vBilling = frm_cadastro.mskBilling.Text
            vServico = frm_cadastro.txtServico.Text
            vDescricao = frm_cadastro.lblDescricao.Text
    
           
                frm_cadastro.DataGrid1.Rows.Add(vData, vOS, vPart, vBilling, vSerial, vServico, vDescricao, vHora)
            
            
    
        End Sub

    Agora o código que vai verificar os itens incluidos no Datagrid, você precisa fazer um laço que percorra todas as linhas do datagrid, e amarrar com um valor primário, por exemplo, se você for fazer um cadastro de produtos, existe apenas um código para identificar o produto...e se você inserir ele várias vezes com o mesmo código pode bugar o esquema, então o trivial seria fazer uma verificação com uma variável Booleana, vamos no código abaixo:

    Public Sub VerificarLista()
    'Aqui ele vai passar por todas as linhas'
            Dim existe As Boolean = False 'Aqui ele verifica'
            For Each dgv As DataGridViewRow In frm_cadastro.DataGrid1.Rows
                If dgv.Cells(2).Value = frm_cadastro.txtPart.Text Then
                    existe = True 'Se os dados conter igual há um valor que foi digitado em uma caixa de texto ele sinaliza verdadeiro'
                End If
            Next'Proximo passo'
    'Veririficar quando for verdadeiro'
            If existe = True Then
                MsgBox("Item já está incluso") 'Se o item existe ele apresenta a mensagem'
            ElseIf existe = False Then
                AdicionarNaLista() 'Caso ao contrário aqui ele adiciona o item na lista'
    
            End If
    
        End Sub

    Eis o código pronto!

    Se você quiser inserir os dados no banco de dados eu fiz dessa forma:

    Primeiro eu fiz o meu datagrid aparecer as colunas de forma de código:

     Public Sub CarregarGrid()
            frm_cadastro.dgvInsert.ColumnCount = 8
            frm_cadastro.dgvInsert.Columns(0).Name = "Data"
            frm_cadastro.dgvInsert.Columns(1).Name = "OS"
            frm_cadastro.dgvInsert.Columns(2).Name = "Part"
            frm_cadastro.dgvInsert.Columns(3).Name = "Billing"
            frm_cadastro.dgvInsert.Columns(4).Name = "Serial"
            frm_cadastro.dgvInsert.Columns(5).Name = "Serviço"
            frm_cadastro.dgvInsert.Columns(6).Name = "Descrição"
            frm_cadastro.dgvInsert.Columns(7).Name = "Hora"
    
    
    
    
        End Sub

    Depois desse passo eu fiz a função de AdicionarNaLista(), depois disso fiz a VerificarLista() e agora pra salvar no banco de dados eu fiz assim:

    For i = 0 To frm_cadastro.dgvInsert.Rows.Count - 2
                Dim sql As String = "INSERT INTO Reparo (Data, OS, Part, Billing, Serial, Servico, Descricao, Hora) VALUES ('" & frm_cadastro.dgvInsert.Item("Data", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("OS", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Part", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Billing", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Serial", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Serviço", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Descrição", i).Value & "','" & _
                    frm_cadastro.dgvInsert.Item("Hora", i).Value & "')"
    
                Dim scmd As New OleDbCommand(sql, conexao_access)
                conexao_access.Open()
                scmd.ExecuteNonQuery()
                conexao_access.Close()
    
            Next
    
            MsgBox("Salvo com Sucesso!")
            frm_cadastro.dgvInsert.Rows.Clear()
    
            Limpar()

    Agora é só utilizar o exemplo e aplicar em seu desenvolvimento, espero ter ajudado!

    Forte abraço e sucesso!


    terça-feira, 2 de agosto de 2016 15:05
  • Muito obrigado. Era isto que eu pretendia. Funcionou beleza. Obrigado.

    helio Passos

    quarta-feira, 3 de agosto de 2016 13:35