Indice DataGridView

14/07/2006 - 15:45 por Roberto | Informe spam
¿Hay algun manera de saber que índice fila de un DataSet está relacionado con
el índice de fila de un DataGridView? En el DataSet se van guardando medida
que se insertan y si en el DataGridView tenemos una ordenación diferente los
índices no se corresponden el uno con el otro.

He probado a ordenar el DataGridView:
grd.Sort(grd.Columns(33),System.ComponentModel.ListSortDirection.Ascending)
y su DataSource con el mismo orden:
MiDS.Tables("Tabla").Select("", "Orden")
pero al hacer la select del dataset sin especificar nada más que el orden
sólo me coge cuantro campos de los 46 que tengo.

CurrentRow.Index, CurrentCell.RowIndex y CurrentCellAddress.Y hacen
referencia al mismo, el del DataGridView y no encuentro ninguno que me lo
relacione con el del dataset.

Tampoco puedo utilizar datos del DataGrid para buscar en el DataSet porque
los que me servirían para deferenciar están ocultos y no se puede hacer la
celda activa para leerlos. Además tampoco me serviría para hacer una select
porque me devolvería sólo un resultado con indice 0, no el del DataSet
completo. Y hacer una función que recorra todo el DataSet para devolverme el
índice sería una burrada de lento, me desplazo muy amenudo por los registros
y precisamente me gustaba la ventaja del DataSet para poder acceder a todos
los campos sabiendo el índice sin tener que buscar.
 

Leer las respuestas

#1 Eduardo Alvarado Meza
15/07/2006 - 08:34 | Informe spam
Roberto, tu duda es muy común, no es posible saber con exactitud el indice,
especialmente cuando partimos del indice de la fila seleccionada en el
control y mucho menos cuando tenemos un sort en este.

En la mayoria de los casos nos imaginamos que solo necesitamos saber el
indice de la fila para poder accesar al Datarow correcto en el dataset, y
eso es posible sin el indice y sin importar el sort. Esto es de la siguiente
manera:

'Si estas utilizando un bindingsource en tu form se aplica asi
MiDataRowSeleccionado = Ctype(Me.Mi_Binding_Source.Current, DataRowView).Row

De no usar un bindingsource haz lo mismo solo que con el
Me.BindingContext(dataset, "Tabla").Current
Nota que la propiedad Position del bindingSource o BindingContext apunta al
indice pero de la fila en el control por lo que no nos sirve.

Si saber el indice del DataRow obtenido es muy importante para ti, lo puedes
conseguir de la siguiente manera:
indice = Me.MiDataSet.Tables("Tabla").Rows.IndexOf(MiDataRowSeleccionado )

Chequealo y dime si funciona..

Preguntas similares