DATAGRIDVIEW
Hey galera estou de volta com mais uma duvida, desta vez é no datagridview
tenho uma tela de consulta de produtos com datagriview, oque eu quero fazer
é inserir os dados direto no datagrid e quando eu passar para proxima linha ele já
add no bd, se alguem souber como fazer isso ou algum artigo sobre isso, eu agradeço...
tenho uma tela de consulta de produtos com datagriview, oque eu quero fazer
é inserir os dados direto no datagrid e quando eu passar para proxima linha ele já
add no bd, se alguem souber como fazer isso ou algum artigo sobre isso, eu agradeço...
Existe algumas formas para fazer isso. Voce poderia usar o evento RowLeave (ativado quando sai do registro atual para outro) ou o RowsAdded ( ativado quando alguma registro é adicionado) do DaGridView para fazer isso.
OBS: Pelo e as eventArgs do evento, voce pode capturar os dados do registro para enseri-los no banco.
vlw
OBS: Pelo e as eventArgs do evento, voce pode capturar os dados do registro para enseri-los no banco.
vlw
Ola JABA, com o evento RowLeave
Private Sub dgvdetalhes_RowLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvdetalhes.RowLeave
If Keys.Enter Then
If CodigoGrade <> 0 Then
alterar_grade()
Else
inclui()
End If
End If
End Sub
ele da erro
Private Sub dgvdetalhes_RowLeave(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvdetalhes.RowLeave
If Keys.Enter Then
If CodigoGrade <> 0 Then
alterar_grade()
Else
inclui()
End If
End If
End Sub
ele da erro
Desculpe, mas essa parte do [Ô]OBS: Pelo e as eventArgs do evento, voce pode capturar os dados do registro para enseri-los no banco.[Ô]
eu não intendi...
eu não intendi...
Voce pode fazer tambem da seguinte forma:
Habilite o KeyPreview do form para true.
Joga um novo DataGridView com o nome: Grid1 e depois insira o codigo abaixo no formulario da nova grid.
Private Sub frmPrincipal_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
grid1.Columns.Add([Ô]colunaId[Ô], [Ô]Id[Ô])
grid1.Columns.Add([Ô]colunaNome[Ô], [Ô]Nome[Ô])
grid1.Rows.Add([Ô]1[Ô], [Ô]Rodrigo[Ô])
grid1.Rows.Add([Ô]2[Ô], [Ô]Santana[Ô])
grid1.Rows.Add([Ô]3[Ô], [Ô]Porto[Ô])
End Sub
Private Sub frmPrincipal_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
If grid1.CurrentCell.RowIndex < grid1.Rows.Count - 1 Then
MsgBox([Ô]Esse é o registro que você tem que inserir no bd --> [Ô] & grid1.Columns(0).Name & [Ô]: [Ô] & grid1.CurrentRow.Cells(0).Value & [Ô] [Ô] & grid1.Columns(1).Name & [Ô]: [Ô] & grid1.CurrentRow.Cells(1).Value)
grid1.CurrentCell = grid1.Rows(grid1.CurrentCell.RowIndex + 1).Cells(0)
End If
e.Handled = True
End If
End Sub
se eu te ajudei, por favor, me pontue. vlw
Habilite o KeyPreview do form para true.
Joga um novo DataGridView com o nome: Grid1 e depois insira o codigo abaixo no formulario da nova grid.
Private Sub frmPrincipal_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
grid1.Columns.Add([Ô]colunaId[Ô], [Ô]Id[Ô])
grid1.Columns.Add([Ô]colunaNome[Ô], [Ô]Nome[Ô])
grid1.Rows.Add([Ô]1[Ô], [Ô]Rodrigo[Ô])
grid1.Rows.Add([Ô]2[Ô], [Ô]Santana[Ô])
grid1.Rows.Add([Ô]3[Ô], [Ô]Porto[Ô])
End Sub
Private Sub frmPrincipal_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
If grid1.CurrentCell.RowIndex < grid1.Rows.Count - 1 Then
MsgBox([Ô]Esse é o registro que você tem que inserir no bd --> [Ô] & grid1.Columns(0).Name & [Ô]: [Ô] & grid1.CurrentRow.Cells(0).Value & [Ô] [Ô] & grid1.Columns(1).Name & [Ô]: [Ô] & grid1.CurrentRow.Cells(1).Value)
grid1.CurrentCell = grid1.Rows(grid1.CurrentCell.RowIndex + 1).Cells(0)
End If
e.Handled = True
End If
End Sub
se eu te ajudei, por favor, me pontue. vlw
Amigo,
Me.ItemTableAdapter.Update(DataSet1.Item)
MessageBox.Show([Ô]Alteração(ões) salvas com Sucesso![Ô], [Ô]Skilo[Ô], MessageBoxButtons.OK)
Me.ItemTableAdapter.Fill(Me.DataSet1.Item)
Coloque esse código em um Botão perto do DataGrid, no qual irá atualizar os novos dados no BD, pelo menos foi assim q eu fiz.
Espero ter ajudado.
Abraço.
Me.ItemTableAdapter.Update(DataSet1.Item)
MessageBox.Show([Ô]Alteração(ões) salvas com Sucesso![Ô], [Ô]Skilo[Ô], MessageBoxButtons.OK)
Me.ItemTableAdapter.Fill(Me.DataSet1.Item)
Coloque esse código em um Botão perto do DataGrid, no qual irá atualizar os novos dados no BD, pelo menos foi assim q eu fiz.
Espero ter ajudado.
Abraço.
Obrigado UMBRELA mas eu quero eliminar a presença de botões...
Agora meu amigo JABA, me diga uma coisa, quando vai entrar
neste if: If grid1.CurrentCell.RowIndex < grid1.Rows.Count - 1 Then
Agora meu amigo JABA, me diga uma coisa, quando vai entrar
neste if: If grid1.CurrentCell.RowIndex < grid1.Rows.Count - 1 Then
esse if indica que enquanto não chegar na ultima linha do grid, ele passa para o proximo registro. Se não tiver isso, ele vai gerar um erro quando voce chegar no ultimo registro.
o que eu fiz funcionou para o seu caso?
vlw
o que eu fiz funcionou para o seu caso?
vlw
Então cara, estou a testar ainda, mais não esta funcionando no momento certo
para ele entrar no segundo if, tenho que retornar na ultima linha que inseri e apertar enter
gostaria que fosse inserido quando eu passar para ultima linha, o codigo esta assim:
Private Sub frmPrincipal_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
If Grid1.CurrentCell.RowIndex < Grid1.Rows.Count - 1 Then
[ô]MsgBox([Ô]Esse é o registro que você tem que inserir no bd --> [Ô] & Grid1.Columns(0).Name & [Ô]: [Ô] & Grid1.CurrentRow.Cells(0).Value & [Ô] [Ô] & Grid1.Columns(1).Name & [Ô]: [Ô] & Grid1.CurrentRow.Cells(1).Value)
cnn.Open()
cmd = New SqlCommand([Ô]sp_i_insert_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = txt1.Text
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.Grid1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.Grid1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@qtd[Ô], Me.Grid1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código de Barras[Ô]).Value)
Grid1.CurrentCell = Grid1.Rows(Grid1.CurrentCell.RowIndex + 1).Cells(0)
cnn.Close()
cmd = Nothing
End If
e.Handled = True
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_s_seleciona_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codigo[Ô], SqlDbType.Int).Value = txt1.Text
da = New SqlDataAdapter(cmd)
ds = New DataSet
da.Fill(ds, [Ô]sp_s_seleciona_grade[Ô])
Me.Grid1.DataSource = ds.Tables(0).DefaultView
Catch ex As Exception
MsgBox([Ô]Err: [Ô] & Err.Description, MsgBoxStyle.Critical)
Finally
cnn.Close()
cmd = Nothing
End Try
End Sub
Pode ficar tranquilo, quando der certo irei dar positivo para você
para ele entrar no segundo if, tenho que retornar na ultima linha que inseri e apertar enter
gostaria que fosse inserido quando eu passar para ultima linha, o codigo esta assim:
Private Sub frmPrincipal_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.Enter Then
If Grid1.CurrentCell.RowIndex < Grid1.Rows.Count - 1 Then
[ô]MsgBox([Ô]Esse é o registro que você tem que inserir no bd --> [Ô] & Grid1.Columns(0).Name & [Ô]: [Ô] & Grid1.CurrentRow.Cells(0).Value & [Ô] [Ô] & Grid1.Columns(1).Name & [Ô]: [Ô] & Grid1.CurrentRow.Cells(1).Value)
cnn.Open()
cmd = New SqlCommand([Ô]sp_i_insert_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codpro_grade[Ô], SqlDbType.Int).Value = txt1.Text
cmd.Parameters.AddWithValue([Ô]@codigo[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc1[Ô], Me.Grid1.CurrentRow.Cells([Ô]Coluna 1[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@desc2[Ô], Me.Grid1.CurrentRow.Cells([Ô]Coluna 2[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@qtd[Ô], Me.Grid1.CurrentRow.Cells([Ô]Qtde[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_forn_grade[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código Fornecedor[Ô]).Value)
cmd.Parameters.AddWithValue([Ô]@cod_bar[Ô], Me.Grid1.CurrentRow.Cells([Ô]Código de Barras[Ô]).Value)
Grid1.CurrentCell = Grid1.Rows(Grid1.CurrentCell.RowIndex + 1).Cells(0)
cnn.Close()
cmd = Nothing
End If
e.Handled = True
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
cnn.Open()
cmd = New SqlCommand([Ô]sp_s_seleciona_grade[Ô], cnn)
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.Parameters.Add([Ô]@codigo[Ô], SqlDbType.Int).Value = txt1.Text
da = New SqlDataAdapter(cmd)
ds = New DataSet
da.Fill(ds, [Ô]sp_s_seleciona_grade[Ô])
Me.Grid1.DataSource = ds.Tables(0).DefaultView
Catch ex As Exception
MsgBox([Ô]Err: [Ô] & Err.Description, MsgBoxStyle.Critical)
Finally
cnn.Close()
cmd = Nothing
End Try
End Sub
Pode ficar tranquilo, quando der certo irei dar positivo para você
cara, eu acho que existem duas formas para o que voce quer:
1ª é você salvar os dados no bd para depois carregar o grid.
2ª é voce inserir o registro na grid e depois capturar o registro na grid e salvar no bd.
Se voce quiser optar pela segunda opção, voce não terá como fazer isso usando : Me.Grid1.DataSource = ds.Tables(0).DefaultView porque está no modo DataBind. O grid não deixa voce inserir um unico registro depois que voce o preencheu como DataBind. Ele só permite visualizar, carregando toda a grid novamente. Para burlar isso, você teria que lançar os registros na grid manualmente criando as colunas e jogando cada registro como o exemplo abaixo:
grid1.Columns.Add([Ô]colunaId[Ô], [Ô]Id[Ô])
grid1.Columns.Add([Ô]colunaNome[Ô], [Ô]Nome[Ô])
grid1.Rows.Add([Ô]1[Ô], [Ô]Rodrigo[Ô])
grid1.Rows.Add([Ô]2[Ô], [Ô]Santana[Ô])
grid1.Rows.Add([Ô]3[Ô], [Ô]Porto[Ô])
vlw
1ª é você salvar os dados no bd para depois carregar o grid.
2ª é voce inserir o registro na grid e depois capturar o registro na grid e salvar no bd.
Se voce quiser optar pela segunda opção, voce não terá como fazer isso usando : Me.Grid1.DataSource = ds.Tables(0).DefaultView porque está no modo DataBind. O grid não deixa voce inserir um unico registro depois que voce o preencheu como DataBind. Ele só permite visualizar, carregando toda a grid novamente. Para burlar isso, você teria que lançar os registros na grid manualmente criando as colunas e jogando cada registro como o exemplo abaixo:
grid1.Columns.Add([Ô]colunaId[Ô], [Ô]Id[Ô])
grid1.Columns.Add([Ô]colunaNome[Ô], [Ô]Nome[Ô])
grid1.Rows.Add([Ô]1[Ô], [Ô]Rodrigo[Ô])
grid1.Rows.Add([Ô]2[Ô], [Ô]Santana[Ô])
grid1.Rows.Add([Ô]3[Ô], [Ô]Porto[Ô])
vlw
cara e se eu fazer com RowLeave, como ficaria?
eu tentei mas ele fica tentando, inserir toda hora...
eu tentei mas ele fica tentando, inserir toda hora...
Tópico encerrado , respostas não são mais permitidas