ASP.NET - No me muestra el primer registro de un DatagridView.

 
Vista:

No me muestra el primer registro de un DatagridView.

Publicado por Fernando P- (9 intervenciones) el 09/11/2012 15:08:07
Hola, paso datos a un DataGridView a traves de una sentencia select, pero lo que me he dado cuenta que al visualizar el resultado en un datagridiew no me visualiza el primer registro encontrado, me salen los datos a partir del 2º registo.

He probado la select para comprobar y me salen todos los datos.

Os pongo el código por si me podéis echar una mano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dim oComandolineas As SqlCommand
Dim oDataLineas As SqlDataReader
Dim pFld As New CommandField
Dim columna As New BoundField
Dim lsQuery as String
 
lsQuery="Select ....."
oConexion.ConnectionString = MiClase.cadena_conexion
oComandolineas = New SqlCommand(lsQuery, oConexion)
oConexion.Open()
oDataLineas = oComandolineas.ExecuteReader()
If oDataLineas.Read() Then
    pFld.ShowSelectButton = True
    pFld.ButtonType = ButtonType.Image
    pFld.SelectImageUrl = "img/hand.png"
    pFld.ItemStyle.Width = Unit.Pixel(5)
    grdResultado.Columns.Add(pFld)
 
    columna.DataField = "Col1"
    columna.HeaderText = "Col1"
    columna.ItemStyle.Width = Unit.Pixel(5)
    grdResultado.Columns.Add(columna)
 
    columna = New BoundField
    columna.DataField = "Col2"
    columna.HeaderText = "Col2"
    columna.ItemStyle.Width = Unit.Pixel(120)
    grdResultado.Columns.Add(columna)
    grdResultado.DataSource = oDataLineas
    grdResultado.DataBind()
End if
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

No me muestra el primer registro de un DatagridView.

Publicado por Sebastian Cruz (35 intervenciones) el 09/11/2012 16:19:17
Lo que pasa es que el DataReader es de solo lectura que avanza para adelante, y al hacer la llamada a la opcion read() le estas diciendo q avance de la posicion actual a la siguiente entonces internamente el dataSource para recorrerte el objeto va llamando a las otras filas pero como el reader original ya habia leido la fila 1 comenzara a hacer todo desde la 2 en adelante, en tu lugar yo crearia un dataset al cual lo llenaria con un DataAdpter y luego preguntaria si el DataSet tiene al menos una tabla y de ser asi a esa tabla se la pasaria al datasource de la grilla de resultados.

1
2
3
4
5
6
7
8
9
10
11
Dim oAdapter As SqlDataAdapter
oAdapter = New SqlDataAdapter(lsQuery, oConexion)
 
Dim Ds as New DataSet
oAdapter.Fill(Ds)
 
If Ds.Tables.Count > 0 Then
....
grdResultado.DataSource = Ds.Tables(0)
grdResultado.DataBind()
End If
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