Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

borges02

[Resolvido] Como obter posição do registro no DataTable?

Recommended Posts

Boa tarde!

 

Gostaria de saber como faço para obter a posição do registro no DataTable usando o método find() do DataTable? Parece que tem que criar um PrimaryKey, mas não sei como criar e nem como usar esse método. Alguem tem alguma idéia de como achar a posição? Estou programando em visual studio 2008 (C#) windows forms....

 

 

Desde já, agradeço pela ajuda e atenção de todos...

 

Muito Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Borges.

Veja um exemplo que fiz que uso num formulario de cadastro de pedidos que tenho com navegação de registros onde, para navegar entre os registros, pego, através de chave primaria, posição do registro na tabela e mando esse datarow(posição do registro) na tabela (datatable) e mando para uma função exibir os registros. Veja:

Public Sub CarregaPagina()
		Dim sqlpedidos As String = "select p.pedidoID, p.clienteID, p.ativo, p.data, c.nome as nome from  pedidos p inner join clientes c ON  p.clienteID = c.clienteID  where p.ativo='S' order by pedidoID"
		ds = accDb.ExecuteDS(sqlpedidos, TabelaPedidos)
		dt = ds.Tables(tabelapedidos)
		registropedidos = dt.Rows.Count - 1
		' com primarykey
		dt.PrimaryKey = New DataColumn() {dt.Columns(0)}
		dr = dt.Rows.Find(registropedidos)
		registropedidos = dt.Rows.IndexOf(dr) ' aqui acho a posição do registro na tabela
		' com primarykey
		desabilita()
		If dt.Rows.Count = 0 Then
			Primeiro.Enabled = False
			Anterior.Enabled = False
			Proximo.Enabled = False
			Ultimo.Enabled = False
			Atualizar.Enabled = False
			Eliminar.Enabled = False
		End If
		If dt.Rows.Count > 0 Then
			registropedidos = 0
			Primeiro_Click(Nothing, Nothing) ' e aqui, dou um toque no Botão "Primeiro"
		Else
			registropedidos = -1
		End If
	End Sub

No Load do form faço apenas a chamada para esta procidure:

Private Sub Pedidos_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
		'carrega pedidos
		CarregaPagina()
	End Sub
E, nos botões faço:

Private Sub Primeiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Primeiro.Click
		registropedidos = 0
		exibirDados(registropedidos)
		listaitens()
	End Sub

	Private Sub Anterior_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Anterior.Click
		registropedidos = registropedidos - 1
		If registropedidos < 0 Then registropedidos = 0
		exibirDados(registropedidos)
		listaitens()
	End Sub

	Private Sub Proximo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Proximo.Click
		Dim i As Integer = dt.Rows.Count - 1
		registropedidos = registropedidos + 1
		If registropedidos > i Then registropedidos = i
		exibirDados(registropedidos)
		listaitens()
	End Sub

	Private Sub Ultimo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Ultimo.Click
		registropedidos = dt.Rows.Count - 1
		exibirDados(registropedidos)
		listaitens()
	End Sub
Ah tomai tb a função exibirDados onde eu informo a variavel registropedidos que é exatamente a posição do registro no DataTable usando o método find() do DataTable ou seja, o que você quer .

Bom estudo e qualquer duvida poista e de novo ok?

Private Sub exibirDados(ByVal m As Integer)
		Dim i As Integer = dt.Rows.Count - 1
		If m < 0 OrElse i < 0 Then Exit Sub
		dr = dt.Rows(m)
		LabelCodigoPed.Visible = True
		codigoped.Visible = True
		codigoped.Text = dr("pedidoID")
		codigocli.Text = dr("clienteID")
		cliente.Text = dr("nome")
		data.Text = dr("data")
	End Sub

Agora é só adaptar ao teu código

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, adaptei ao meu código, testei e deu certo, era isso que eu estava precisando mesmo. Valeu Carcleo e Quintelab, muito obrigado pelos exemplos, dicas, sugestões e ajuda, valeu mesmo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.