Punteros a Registros

04/05/2005 - 11:48 por Damian Galletini | Informe spam
Buenas, mi duda es la siguiente, cuando conecto una tabla de un DataSet a un
DataGrid y muevo el puntero de la fila en el DataGrid, en el DataSet
¿tambien se mueve como pasaba en VB6 con lso recordsets?, ahora lo que venia
haciendo es que la ultima columna del DataGrid contenia el ID de la tabla y
la ocultaba entonces lo recuperaba de ahi, pero es muy poco "elegante" a
nivel de codigo hacer eso, por eso queria saber si hay alguna manera de
recuperar el valor de un campo determinado de la fila actual del DataSet (en
caso de que esta se vaya moviendo conjuntamente con el DataGrid).
EJ: Valor = DataSet.Tables("UnaTabla").Row(quiero que se la misma del data
grid)("ID")
 

Leer las respuestas

#1 Tristan
04/05/2005 - 22:00 | Informe spam
En ado.net, las tablas no tienen concepto de posición actual. Lo que existe
es una clase externa, que gestiona la posición actual, para un
control/datasource dado. Esta clase se llama CurrencyManagaer. La ventaja de
hacerlo así es que se pueden controlar distintas posiciones actuales (según
controles) para una misma fuente de datos.

Esto sería un ejemplo de uso del CurrencyManager:

private WithEvents CM as CurrencyManager


Donde dispongas de tu datasource, probablemente un dataset, haz algo así:

Posicion = DirectCast(Me.BindingContext(tuDataSet, "TuTabla"),
CurrencyManager)


Ahora dispondrás en Posicion.Position del índice de la fila seleccionada.
Puedes usar también Posicion.Current para obtener el objeto fila en si. Solo
tienes que hacer un casting al tipo de fila que componga tu datasource, para
obtener acceso directo a los campos:

dim fila as DataRow = DirectCast(Posicion.Current, DataRow)
msgbox(fila("TuCampo"))


Además, puesto que he definido Posicion como WithEvents, podrás utilizar sus
eventos, por ej. PositionChanged para reaccionar al cambio de posición y
mostrar los campos.

Por cierto, también puedes olvidarte de todo esto y utilizar enlace a datos.
Por si no lo conoces:

TuTextBox.DataBindings.Add("Text", TuDataSet.Tables("TuTabla"), "TuCampo")

De esta forma, el textbox actualizará automáticamente su propiedad Text, con
el valor del campo de la tabla que selecciones.

Juan Carlos Badiola
MVP - C#

Preguntas similares