NAVEGAR PELO DATAGRIDVIEW E MOSTRAR REGISTROS

PERCIFILHO 12/07/2011 10:38:21
#378987
Bom dia, pessoal, estou eu aqui de novo com uma dúvida. Tenho 2 DataGridViews. Em um mostro os numeros de controle e a data. E no outro mostro os pedidos referentes aos controles selecionados. Ao clicar com o mouse sobre o controle doo DataGrid1, mostro os pedidos no DataGrid2. E assim por diante, quando clico em um determinado controle o DataGrid2 é preenchido com os registros referentes ao controle selecionado. Até aqui eu consegui.
Só que isso é feito com o clique do mouse (não duplo clique, apenas clique).
Agora se eu for navegando com setas para cima e para baixo, gostaria de fazer o mesmo efeito, a cada registro selecionado mostrar na DataGrid2 os pedidos sem ter que clicar no registro.
Em qual evento do DataGridView tenho que colocar o código?

Até mais.
ALTAIR148 12/07/2011 10:57:26
#378990
Bom dia,

Tenta assim colega

Private Sub grid_produtos_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grid_produtos.CellEnter
MsgBox(grid_produtos.Rows(0).Cells(8).Value()) [ô].Cells(8), indica que vou pegar o valor da coluna Nº 08.
End Sub


Até mais
PERCIFILHO 12/07/2011 14:35:02
#379002
Olha, o código que estou usando é esse:

Private Sub ConsultaCipc_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
[ô]limpa o DataGridView
DgvCipc.Rows.Clear()
Dim cmdcipc As SqlCommand
Dim drcipc As SqlDataReader
cmdcipc = New SqlCommand([Ô]Select Distinct(numero),data From Cipc Order by data Desc[Ô], conexao)
cmdcipc.Connection = conexao
[ô] abre a conexão
conexao.Open()
drcipc = cmdcipc.ExecuteReader()
[ô] preenche o DataGridView de Controle
While drcipc.Read
Dim numero As String = drcipc.Item(0)
Dim data As String = drcipc.Item(1)
DgvCipc.Rows.Add(numero.PadLeft(10), data)
End While
[ô] fecha a conexão
drcipc.Close()
conexao.Close()
End Sub

Private Sub DgvCipc_CellContentDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DgvCipc.CellContentDoubleClick
[ô] retorna o valor da primeira célula do DataGridView para o Formulário Controle (Cipc)
Cipc.TxtNumero.Text = DgvCipc.Rows(e.RowIndex).Cells(0).Value
Dim cmdcipc As SqlCommand
Dim drcipc As SqlDataReader
cmdcipc = New SqlCommand([Ô]Select * From Cipc Where numero = [Ô] & Cipc.TxtNumero.Text, conexao)
cmdcipc.Connection = conexao
[ô] abre a conexão
conexao.Open()
drcipc = cmdcipc.ExecuteReader
drcipc.Read()
[ô] retorna o valor da célula data para o campo data do Formulário Controle (Cipc)
Cipc.TxtData.Text = drcipc.Item([Ô]data[Ô])
[ô] fecha a conexão
drcipc.Close()
conexao.Close()
[ô] fecha o form
Me.Close()
End Sub

Private Sub DgvCipc_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles DgvCipc.KeyDown
[ô] quando teclado ENTER no registro do DataGridView
If e.KeyCode = Keys.Return Then
e.Handled = True
[ô] retorna o valor da primeira célula do DataGridView para o Formulário Controle (Cipc)
Cipc.TxtNumero.Text = DgvCipc.SelectedRows(0).Cells(0).Value
Dim cmdcipc As SqlCommand
Dim drcipc As SqlDataReader
cmdcipc = New SqlCommand([Ô]Select * From Cipc Where numero = [Ô] & Cipc.TxtNumero.Text, conexao)
cmdcipc.Connection = conexao
[ô] abre a conexão
conexao.Open()
drcipc = cmdcipc.ExecuteReader
drcipc.Read()
[ô] retorna o valor da célula data para o camlpo data do Formulário Controle (Cipc)
Cipc.TxtData.Text = drcipc.Item([Ô]data[Ô])
[ô] fecha a conexão
drcipc.Close()
conexao.Close()
[ô] fecha o formulário
Me.Close()
End If
End Sub

Private Sub DgvCipc_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DgvCipc.CellClick
[ô] se o foco estiver fora dos registros do DataGridView, não executa nenhuma ação
If e.RowIndex < 0 Then
[ô] fecha a conexão
conexao.Close()
Exit Sub
End If
Dim cmdpedidos As SqlCommand
cmdpedidos = New SqlCommand([Ô]Select * From Pedidos Where numero = [Ô] & DgvCipc.Rows(e.RowIndex).Cells(0).Value, conexao)
cmdpedidos.Connection = conexao
[ô] abre a conexão
conexao.Open()
DgvPedidos.Rows.Clear()
Dim drpedidos As SqlDataReader = cmdpedidos.ExecuteReader
Dim xcontrole As Integer = 1
[ô] preenche o DataGridView de Pedidos
While drpedidos.Read
Dim cliente As String = drpedidos.Item(2)
Dim pedido As String = drpedidos.Item(3)
Dim valor As String = drpedidos.Item(4)
DgvPedidos.Rows.Add(xcontrole, cliente.ToString, pedido.ToString.PadRight(10), valor.ToString.PadLeft(10))
xcontrole = xcontrole + 1
End While
[ô] fecha a conexão
drpedidos.Dispose()
drpedidos.Close()
Dim leitor As DataTable
Dim dacipc As New SqlDataAdapter([Ô]Select * From Cipc Where numero = [Ô] & DgvCipc.Rows(e.RowIndex).Cells(0).Value, conexao)
leitor = New DataTable()
dacipc.Fill(leitor)
Dim linhatabela As Integer = 0
[ô] limpa o TextBox Observações
TxtObservacao.Clear()
[ô] preenche o campo Observações do Form
While linhatabela < leitor.Rows.Count
TxtObservacao.Text = TxtObservacao.Text & leitor.Rows(linhatabela)(2).ToString()
linhatabela += 1
End While
[ô] fecha a conexão
conexao.Close()
End Sub

Private Sub DgvCipc_CellEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DgvCipc.CellEnter
[ô] quando o foco estiver em algum registro, é para mostrar os dados
[ô] como se fosse o evento CellClick do DataGridView
[ô] como o colega Altair148 me recomendou
Dim cmdpedidos As SqlCommand
cmdpedidos = New SqlCommand([Ô]Select * From Pedidos Where numero = [Ô] & DgvCipc.Rows(e.RowIndex).Cells(0).Value, conexao)
cmdpedidos.Connection = conexao

[txt-color=#0000f0] conexao.Open() [ô] ***** ocorre o erro nesta linha
[ô] Mensagem: The connection was not closed. The connection[ô]s current state is open.
[ô]
[ô] se eu ignorar esta linha, o erro ocorre na linha abaixo:
[/txt-color] DgvPedidos.Rows.Clear()
[txt-color=#0000f0] Dim drpedidos As SqlDataReader = cmdpedidos.ExecuteReader [ô] se ignorar a linha acima ocorre erro nesta linha ****
[ô] Mensagem: There is already an open DataReader associated with this Command which must be closed first.
[/txt-color] Dim xcontrole As Integer = 1
While drpedidos.Read
Dim cliente As String = drpedidos.Item(2)
Dim pedido As String = drpedidos.Item(3)
Dim valor As String = drpedidos.Item(4)
DgvPedidos.Rows.Add(xcontrole, cliente.ToString, pedido.ToString.PadRight(10), valor.ToString.PadLeft(10))
xcontrole = xcontrole + 1
End While
drpedidos.Dispose()
drpedidos.Close()
Dim leitor As DataTable
Dim dacipc As New SqlDataAdapter([Ô]Select * From Cipc Where numero = [Ô] & DgvCipc.Rows(e.RowIndex).Cells(0).Value, conexao)
leitor = New DataTable()
dacipc.Fill(leitor)
Dim linhatabela As Integer = 0
TxtObservacao.Clear()
While linhatabela < leitor.Rows.Count
TxtObservacao.Text = TxtObservacao.Text & leitor.Rows(linhatabela)(2).ToString()
linhatabela += 1
End While
conexao.Close()
End Sub

Não entendo por que dá esse erro. Se eu excluir do código o evento CellEnter, não ocorre erro nenhum. Será que não tenho que usar um outro evento ao invés do CellEnter?
Alguém pode me ajudar?.

Até mais
Tópico encerrado , respostas não são mais permitidas