Visual Basic.NET - Recorrer varios registros

 
Vista:

Recorrer varios registros

Publicado por maria (39 intervenciones) el 14/04/2009 13:34:31
Hola,

Tengo un formulario en el que tengo que hacer mediante botones las mismas funciones que un bindingnavigator, es decir, que se vaya al anterior registro y al siguiente según pulsemos. Solo se me ocurre una manera de hacerlo seleccionando el registo en pantalla con un select y moverme al anterior y al siguiente respectivamente, pero no se si existe alguna función para esto.

Espero que me puedan ayudar.

Muchísimas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Recorrer varios registros

Publicado por pacopaz (19 intervenciones) el 14/04/2009 19:24:24
Y que tal algo de (aunque no mucho de) orientación a objetos?
Si defines una estructura con los campos de tu tabla y esta la asignas a una coleccion, puedes navegar la colección y no los registros, cargándolos una vez. Incluso si creas banderas de modificación e inserción, puedes manejar todos los registros y al final guardar los cambios, con el mínimo de acceso a base de datos.
Para entender un poco más de estructuras y colecciones, dirígete a estas páginas:
http://msdn.microsoft.com/es-es/library/ms229031.aspx
http://msdn.microsoft.com/es-es/library/ms132397(VS.95).aspx

Puede ser algo como esto (aunque no necesariamente como esto, por que estoy codificando directo en la página):

Imports System.Collections.ObjectModel
Imports System.Data.OleDb

Public Structure Registro
Public Id as Integer
Public Nombre as String
...
...
'y así para todos los campos en la tabla
End Structure

Public Tabla as Collection(Of Registro)
Public _Cual as Integer 'Será el índice del registro actual

Private Sub CargarTabla()
Dim vtRegistro as Registro
'Creas la conexion
'Creas un comando (voCommand)
'Creas un lector (voReader)
'Conectas y asignas la conexion al comando
'Asignas un query como: select * from tabla
voReader = voCommand.ExecuteReader()
if voReader.HasRows then
while voReader.Read()
vtRegistro = New Registro()
vtRegistro.Id = Lector.GetInt32(0)
vtRegistro.Nombre = Lector.GetString(1)
...
'y así para cada registro
Tabla.Add(vtRegistro)
end while
'desconectas y destruyes todos los objetos creados en este procedimiento
End Sub

Protected Sub Form_Load(...)
Tabla = New Collection(Of Registro)
CargarTabla()
Mostrar(0)
end sub

Private Sub Mostrar(ByVal pCual as Integer)
'asumo que son textbox donde van los datos.
'pCual es el índice o registro que vas a mostrar, cuando inicias, es el registro 0
txtId.Text = Tabla(pCual).Id
txtNombre.Text = Tabla(pCual).Nombre
...
'y así para todos
_Cual = pCual
end sub

'para cada botón de navegación, sucede algo similar:

Protected Sub btnPrimero_Click(...)
Mostrar(0)
end sub

Protected Sub btnAnterior_Click(...)
if _Cual > 0 then Mostrar(_Cual - 1)
end sub

Protected Sub btnSiguiente_Click(...)
if _Cual < Tabla.Count - 1 then Mostrar(_Cual + 1)
end sub

Protected Sub btnUltimo_Click(...)
Mostrar(Tabla.Count - 1)
end sub

'fin del código

Todo esto serviría (con sus adecuaciones, por que no he puesto todo, obviamente), para tablas (o queries) que si tengan registros.
Para controlar modificaciones e inserciones, basta poner dos campos booleanos en tu estructura (uno para modificaciones y otro para inserciones) y comenzarlos en false. Al momento de guardar, basta con recorrer la coleccion buscando estos booleanos como verdaderos, para insertar y modificar, mediante un ExcecuteNonQuery.

Espero que te sirva.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar