Averiguar la Posicion en un Dataset

22/06/2005 - 20:05 por Fabian | Informe spam
Hola, a todos,

quiero saber en que fila esta un codigo en un dataset, como puedo obtener
este dato sin tener que recorrerr toda la tabla

dim xi as integer
for xi = 0 to ds.table("mitabla").row.count - 1
if ds.table("mitabla").row(xi).item("c_codigo") = "12345" then
xnumero = xi
endif
next

Me parece una barrabasada

Gracias Fabian

Preguntas similare

Leer las respuestas

#1 Juan Pedro Gonzalez
23/06/2005 - 03:54 | Informe spam
Hola Fabian,

No entiendo muy bien para que quieres saber el indice de la fila... Si
quieres buscar un codigo bastaria con hacer un:

ds.table("mitabla").Select("c_codigo345")

y te devolvera un array del tipo DataRow que contendra todas las
coindicencias, es decir, todas las filas donde c_codigo sea igual a 12345.

No se si esto te servira de algo.

Un saludo,

Juan Pedro González


"Fabian" escribió en el mensaje
news:
Hola, a todos,

quiero saber en que fila esta un codigo en un dataset, como puedo obtener
este dato sin tener que recorrerr toda la tabla

dim xi as integer
for xi = 0 to ds.table("mitabla").row.count - 1
if ds.table("mitabla").row(xi).item("c_codigo") = "12345" then
xnumero = xi
endif
next

Me parece una barrabasada

Gracias Fabian




Respuesta Responder a este mensaje
#2 Fabian
23/06/2005 - 16:54 | Informe spam
Juan, te cuento que es lo que me pasa, la idea es poder comparar los datos
que me ingresan en un textbox, con los que tengo en una grilla, y si me
coinciden avisar que el dato existe, y dejar posicionado en la grilla el
codigo que ingresaron, y para eso utilizo
datagrid1.currentrowindex = ????

Gracias Fabian


"Juan Pedro Gonzalez" escribió en el mensaje
news:#
Hola Fabian,

No entiendo muy bien para que quieres saber el indice de la fila... Si
quieres buscar un codigo bastaria con hacer un:

ds.table("mitabla").Select("c_codigo345")

y te devolvera un array del tipo DataRow que contendra todas las
coindicencias, es decir, todas las filas donde c_codigo sea igual a 12345.

No se si esto te servira de algo.

Un saludo,

Juan Pedro González


"Fabian" escribió en el mensaje
news:
> Hola, a todos,
>
> quiero saber en que fila esta un codigo en un dataset, como puedo


obtener
> este dato sin tener que recorrerr toda la tabla
>
> dim xi as integer
> for xi = 0 to ds.table("mitabla").row.count - 1
> if ds.table("mitabla").row(xi).item("c_codigo") = "12345" then
> xnumero = xi
> endif
> next
>
> Me parece una barrabasada
>
> Gracias Fabian
>
>
>
>


Respuesta Responder a este mensaje
#3 Tristan
25/06/2005 - 03:04 | Informe spam
Pues me temo fabian que no hay ninguna forma de hacer lo que quieres.
Supongo que los datatable están bastante inspirados en el modelo relacional
en el que la posición no tiene sentido, pero lo cierto es que sería útil
poder hacerlo.

Lo único que se me ocurra es que añadas al DataTable una columna para llevar
el indice.

tabla.Columns.Add("indice", GetType(Integer))
For i As Integer = 0 To tabla.Rows.Count - 1
tabla.Rows(i)("indice") = i
Next

No evita el bucle, pero al menos solo será necesario ejecutarlo una vez, y
no por cada consulta.

El bucle no sería necesario si creas la columna de tipo AutoIncrement, antes
de hacer el Fill:

Dim tabla As New DataTable
tabla.Columns.Add("indice", GetType(Integer)).AutoIncrement = True
OleDbDataAdapter1.Fill(tabla)

El ejemplo es con un DataTable, pero con un dataset sería prácticamente
idéntico.


Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#4 Juan Pedro Gonzalez
27/06/2005 - 11:30 | Informe spam
Hola Fabian,

Ante todo, perdona por la tardanza en mi repsuesta.

Lo primero es que no puedes buascar en el DataSet un indice para la fila del
DataGrid... Como ya sabras el DataGrid lo puedes reaordenar haciendo click
en la columna, y esta accion alterara los indices del DataGrid pero no los
indices de la fila del DataSet! Mucho ojo con esto ya que en tu bucle "For"
podrias obtener indices erroneos. Para obtener el mismo orden que en el
DataGrid debemos emplear la propiedad "DefaultView" que es a la que enlaza
el DataGrid. Por ejemplo:

Dim Contador As Integer = 0
Dim xNumero As Integer = -1

For Each oFila As System.Data.DataRowView In
Me.ds.table("mitabla").DefaultView
If oFila.Item("c_codigo").ToString = "12345" Then
xNumero = Contador
Exit For
End If
Contador += 1
Next

Otra posibilidad es emplear la funcion "Find". El unico problema es que para
que funcione debes emplear tambien la funcion "Sort" sobre la columna que te
interese (Seguramente empleara algun sistema de busqueda rápida en arrays,
para la cual el array debe estar ordenado). Cuando digo "El problema" es
porque si tu usuario ha elegido ordenar por otra columna le vas a alterar el
orden en el que se estan mostrando los datos. Si te interesa el código
sería:

Me.ds.Table("mitabla").DefaultView.Sort = "c_codigo"
Dim xnumero As Integer = Me.ds.Table("mitabla").DefaultView.Find("12345")

If xnumero > -1 Then
Me.miDataGrid.Select(xnumero)
End If

Saludos,

Juan Pedro González



"Fabian" escribió en el mensaje
news:
Juan, te cuento que es lo que me pasa, la idea es poder comparar los datos
que me ingresan en un textbox, con los que tengo en una grilla, y si me
coinciden avisar que el dato existe, y dejar posicionado en la grilla el
codigo que ingresaron, y para eso utilizo
datagrid1.currentrowindex = ????

Gracias Fabian


"Juan Pedro Gonzalez" escribió en el mensaje
news:#
> Hola Fabian,
>
> No entiendo muy bien para que quieres saber el indice de la fila... Si
> quieres buscar un codigo bastaria con hacer un:
>
> ds.table("mitabla").Select("c_codigo345")
>
> y te devolvera un array del tipo DataRow que contendra todas las
> coindicencias, es decir, todas las filas donde c_codigo sea igual a


12345.
>
> No se si esto te servira de algo.
>
> Un saludo,
>
> Juan Pedro González
>
>
> "Fabian" escribió en el mensaje
> news:
> > Hola, a todos,
> >
> > quiero saber en que fila esta un codigo en un dataset, como puedo
obtener
> > este dato sin tener que recorrerr toda la tabla
> >
> > dim xi as integer
> > for xi = 0 to ds.table("mitabla").row.count - 1
> > if ds.table("mitabla").row(xi).item("c_codigo") = "12345" then
> > xnumero = xi
> > endif
> > next
> >
> > Me parece una barrabasada
> >
> > Gracias Fabian
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Juan Pedro Gonzalez
27/06/2005 - 11:32 | Informe spam
Hola Tristan,

Ojo con los indices del DataSet! Como ya he mencionado el indice que se
corresponde con el DataGrid no proviene de la "Tabla", sino de la "Vista por
defecto" y dichos indices pueden variar si no se especifica lo contrario por
lo que el indice se debería modificar cada vez que se reordena el DataGrid.

Saludos,

Juan Pedro González


"Tristan" escribió en el mensaje
news:
Pues me temo fabian que no hay ninguna forma de hacer lo que quieres.
Supongo que los datatable están bastante inspirados en el modelo


relacional
en el que la posición no tiene sentido, pero lo cierto es que sería útil
poder hacerlo.

Lo único que se me ocurra es que añadas al DataTable una columna para


llevar
el indice.

tabla.Columns.Add("indice", GetType(Integer))
For i As Integer = 0 To tabla.Rows.Count - 1
tabla.Rows(i)("indice") = i
Next

No evita el bucle, pero al menos solo será necesario ejecutarlo una vez, y
no por cada consulta.

El bucle no sería necesario si creas la columna de tipo AutoIncrement,


antes
de hacer el Fill:

Dim tabla As New DataTable
tabla.Columns.Add("indice", GetType(Integer)).AutoIncrement = True
OleDbDataAdapter1.Fill(tabla)

El ejemplo es con un DataTable, pero con un dataset sería prácticamente
idéntico.


Juan Carlos Badiola
MVP - C#


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida