DATAGRIDVIEW

FELIPEDRONI 02/03/2012 13:50:41
#396275
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...
JABA 02/03/2012 15:38:29
#396293
Resposta escolhida
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
FELIPEDRONI 02/03/2012 16:13:52
#396301
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
FELIPEDRONI 02/03/2012 16:22:30
#396303
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...
JABA 02/03/2012 20:11:11
#396328
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
UMBRELLA 03/03/2012 17:25:13
#396384
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.
FELIPEDRONI 05/03/2012 16:13:41
#396463
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

JABA 05/03/2012 16:58:43
#396465
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
FELIPEDRONI 05/03/2012 17:03:10
#396466
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ê
JABA 05/03/2012 17:38:08
#396470
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
FELIPEDRONI 06/03/2012 12:00:00
#396528
cara e se eu fazer com RowLeave, como ficaria?
eu tentei mas ele fica tentando, inserir toda hora...
Página 1 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas