none
Problemas al recorrer un datagrid en VB.Net 2003 RRS feed

  • Pregunta

  • Hola a todos !!!

    Tengo un Form en el que hay dos combos a partir de los cuales monto una sentencia select. Dicha sentencia me carga un Datagrid a partir de los valores de una tabla Access.

    El usuario puede ver la información en el datagrid o generar un documento word (aún me estoy peleando) con dicha información. Mi idea era leer el datagrid  para extraer la información de las columnas de cada fila que necesito, y con ellas montar un documento word. Mi problema es que no se como leer todas las filas del datagrid, desde la primera hasta la última, puesto que existe la propiedad Datagrid.VisibleRowCount quelee sólo las filas visibles del datagrid, pero no la propiedad Datagrid.Count, y yo quiero leer todas las filas:

            With Me.DataGrid2.DataSource
                For i As Integer = 0 To Me.DataGrid2.VisibleRowCount - 1
                    diastr = Me.DataGrid2.Item(i, 0)
                    horastr = Me.DataGrid2.Item(i, 1)
                    .

                    .

                    .

                    oWord.Selection.TypeText(linea)
                    oWord.Selection.TypeParagraph()
                Next
            End With

    La carga del datagrid se realiza en un procedimiento SUB, al que se le pasa la sentencia sql, el datagrid y la conexión, y en dicho SUB se controla si la select devuelve filas o no:

        Public Sub carga_alumno_grid(ByVal sentencia As String, ByVal datagrid1 As DataGrid, ByVal conex As String)

            Dim total_filas_devueltas, Imes As Integer
            Dim con As New OdbcConnection(conex)

            Try
                con.Open()                                                               ' Abrir la conexión a Sql  
                Dim cmd As New OdbcCommand(sentencia, con)     ' Pasar la consulta sql y la conexión al Sql Command   
                Dim da As New OdbcDataAdapter(cmd)                   ' Inicializar un nuevo SqlDataAdapter(cmd)   
                Dim ds As New DataSet                                           ' Crear y Llenar un Dataset

               datagrid1.AlternatingBackColor = Color.LightSteelBlue
               total_filas_devueltas = da.Fill(ds, "0")   
                If total_filas_devueltas = 0 Then
                    MsgBox("No hay datos para este año y alumno", MsgBoxStyle.Information)
                Else
                    With datagrid1
                        .DataSource = ds.Tables("0")
                        .Refresh()
                    End With
                End If
            Catch ex As Exception
                MsgBox(ex.Message.ToString)
            Finally
                If con.State = ConnectionState.Open Then
                    con.Close()
                End If
            End Try

        End Sub

    A malas podría convertir el proceso SUB en una FUNCTION y devolver el número de filas, que sí lo se cuando cargo el grid, pero tendría que ir arrastrando la variable y busco una solución más práctica. (Soy un poco gandul, je je je)

    Alguna idea ??


    Miguel Angel

    • Cambiado Enrique M. Montejo viernes, 20 de julio de 2012 6:10 Controles de Windows Forms (De:Lenguaje VB.NET)
    miércoles, 11 de julio de 2012 21:52

Todas las respuestas

  • la verdad que nunca haria lo que ali planteas, porque eso de pasas el grid a la funcion como que no esta anda bueno

    ademas si usas access como db porque usas el OdbcConnection si puede suar el OleDbConnection que es mucho mejor

    ADO.NET Parte 4 Actualización Información Ms Access

    ADO.NET - Parte 2 - Recuperar Información MS  Access

    el metodo deberia ser un function y devolver el datatable como respuesta, y no cargarlo internamente

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    miércoles, 11 de julio de 2012 22:07
  • Gracias Leandro,

    Respecto de lo de ODBC, cuando hice mis primeros pinitos en VB6 aprendí a hacerlo así y hasta ahora lo he seguido haciendo, respecto de lo segundo, me leeré los links y modificaré todo, olvidando ODBC y pasándolo a OLE.

    De todas maneras, cual es el problema entre ODBC/OLE ?? O donde se explica  ?? Porque los datagrids que lleno como mucho van a tener 100 registros . . .

    Miguel Angel


    Miguel Angel

    jueves, 12 de julio de 2012 19:07
  • Buenas noches;

    aunque veo que tu mensaje tiene 3 meses, lo acabo de ver ahora por lo que es màs que posible que ya hayas resuelto tu pregunta. Yo crearía una 'tabla' para manejar todos los datos (tiene más 'eventos' que el datagrid) :
    dim dt as new datatable

    dt = ds.Tables(0)                                                    '(ojo, sin las comillas que tú has puesto)

    total_filas_devueltas = dt.Rows.Count.ToString     '(aquí tienes el número total de filas)

    Datagrid1.DataSource = dt                                      '(aquí le estas pasando todos los datos de la tabla al DataGrid)

    'Para recorrer todas las filas debes crear un bucle:

    For a as integer = 0 to total_filas_devueltas - 1  

       'aquí van las instrucciones que quieras

    Next

    Espero no haber llegado demasiado tarde con la respuesta.

    Saludos y buenas noches.

    sábado, 13 de octubre de 2012 19:56