none
RECORRER DATASET CON BUCLE FOR i RRS feed

  • Pregunta

  • Nuevamente recurro a ustedes por una pequeña ayuda para lo siguiente, digo pequeña para ustedes expertos en la materia.

    bueno el problema con que me encuentro es el siguiente, hago una consulta access y extraigo lo que es columnas o nombre de las columnas de la tabla y datos que se encuentran en la tabla todo bien hasta aquí, paso el encabezado de la tabla a un data grid bien tal como quiero verlo pero cuando extraigo los datos que se encuentra en la base de datos me los pasa o me los muestra en la primera columna  y no en cada columna como debe ser, a continuación les muestro mi codigo y gracias anticipadamente por la ayuda

    Dim datos As String = ("SELECT*FROM SOCIOS ")
            Dim Adaptador As New OleDbDataAdapter(datos, MiConexion)

            'Dim Tabla As New DataTable
            Dim Tabla As New DataSet
            Adaptador.Fill(Tabla, datos)

            Dim columna As Data.DataColumn


            Dim i, j As Integer
            Dim nomCol() As String
            j = Tabla.Tables(0).Columns.Count - 1
            ReDim nomCol(j)
            MiDGV.Columns.Clear()
            MiDGV.Rows.Clear()
            For i = 0 To j
                columna = Tabla.Tables(datos).Columns(i)
                nomCol(i) = columna.ColumnName

                MiDGV.Columns.Add(0, nomCol(i)) 'AQUI LE AGREGO EL ENCABEZADO A MI DATAGRID 

                For Each row As DataRow In Tabla.Tables(0).Rows
                    Dim Campos As String = row(nomCol(i)).ToString'CON ESTE EXTRAIGO LOS DATOS DE LA BASE DE DATOS
                    MiDGV.Rows.Add(Campos)'AQUI LOS AGREGO A MI DATAGRID PERO COMO YA DIGE ME LOS MUESTRA EN LA PRIMERA COLUMNA 
                Next

                NombresS.Items.Add(nomCol(i))
            Next

            Return
        End Sub  

    YA INTENTE DE MUCHAS FORMAS PERO NO LOGRO ACOMODAR LOS DATOS EN LAS COLUMNAS DONDE DEBEN IR

    domingo, 13 de mayo de 2018 19:25

Todas las respuestas

  • Empiezo con recordarle que el control DataGridView acepta una fuente de datos y por lo tanto, hacer este bucle es innecesario pues ya está programado en el control

    Ahora bien, su código:

    1. Eso de Tables(datos) no me suena.  Según veo, datos es la cadena SQL.  Me parece que debe ser Tables(0).
    2. Aunque puede agregar las columnas programáticamente al control DGV con Columns.Add(), si el control solamente mostrará el mismo tipo de resultado, puede definir las columnas en tiempo de diseño y olvidarse de crearlas en tiempo de ejecución.
    3. El bucle que recorre las filas (For Each row ...) está dentro del bucle que crea las columnas.  Tiene que estar fuera de ese otro bucle.  O sea, primero corre el bucle que crea columnas y luego el bucle que crea filas.

    Pero le repito que no tiene que programar tal cosa.  Si busca el tema de vinculación a datos de Windows Forms, verá que es la mejor forma de operar.


    Jose R. MCP
    Code Samples

    lunes, 14 de mayo de 2018 1:31
    Moderador
  • En resumidas cuentas, limpiando y simplificando el código, basta con lo siguiente para presentar los datos en el DataGridView:

    Dim datos As String = "SELECT * FROM SOCIOS"
    Dim Adaptador As New OleDbDataAdapter(datos, MiConexion)
    Dim Tabla As New DataTable
    Adaptador.Fill(Tabla)
    MiDGV.DataSource = Tabla


    lunes, 14 de mayo de 2018 5:20
  • si mi hermano de hecho yo lo tengo hecho con el DataSource y también he agregado las columnas manualmente, pero mi problema es el siguiente tengo una columna en mi base de datos donde detallo ciertas operaciones y es bastante largas y si vinculo con el datasur las columnas del datagrid no las puedo ensanchar .el bucle que esta dentro del otro es el que me toma el nombre de cada columna que me proporciona el primer bucle, bueno pero como les dije ese no es el problema el problema es que la información de mi base de datos me las muestra en una sola columna de mi datagrid y na como esta almacenada en mi tabla de mi db 

    nuevamente gracias por la ayuda

    lunes, 14 de mayo de 2018 14:59
  • Si lo tiene con vinculación a datos, ¿por qué muestra el código que muestra?  Mi conclusión es que una de las dos afirmaciones no puede ser cierta.  Imagino que tal vez lo tuvo con vinculación a datos y ahora no.

    En cualquier caso, el bucle dentro del otro bucle es su problema, como se lo dejé saber en mi respuesta original.  Primero debe correr y ejecutar al 100% la creación de las columnas, y luego ejecutar el bucle de creación de filas.

    Ah, y la capacidad de ensanchar la columna de un DGV no tiene relación con la forma en que se crean las filas.  Si las filas se crean manualmente o con vinculación a datos, el ancho de la columna debería ser modificable igualmente.


    Jose R. MCP
    Code Samples

    lunes, 14 de mayo de 2018 19:56
    Moderador
  • Te Explico Chepe  a si le decimos a los José en MÉXICO, RECALCO, no soy INGENIERO, ni PASANTE ni ESTUDIANTE soy EMPÍRICO, ya antes hice una Pregunta y Solo me dieron una IDEA pero nada de Codigo y me aferre y ya solucionado.

    pero lo que no me sale, no puedo es como hacer lo siguiente ahí va el código

    este es el original de la idea esta bien me presente en el datagrid tal como esta en la tabla de mi db

            Dim datos As String = ("SELECT*FROM  SOCIOS")
            Dim Adaptador As New OleDbDataAdapter(datos, MiConexion)
            Dim Tablas As New DataSet
            'Dim Tabla As New DataTable

            Adaptador.Fill(Tablas)
            'MiDGV.DataSource = Tablas.Tables(0)

            MiDGV.Columns.Clear() 'POR SI HAY COLUMNAS EN TIEMPO DE DISEÑO
            '---------------------------------------|
            MiDGV.Columns.Add(0, "Id")             ' | 
            MiDGV.Columns.Add(0, "Escalafon")      '  \
            MiDGV.Columns.Add(0, "Nombres")        '  /  Pintamos la Columna de DataGrid
            MiDGV.Columns.Add(0, "Numro Economico") '|  
            '-------------------------------------- |

            For Each row As DataRow In Tablas.Tables(0).Rows
                'NombresS.Items.Add(row("NOMBRE"))

                Dim Id As String = row("Id")
                Dim ESCALA As String = row("ESCALAFON")
                Dim NBR As String = row("NOMBRE")
                Dim No As String = row("NoECONOMICO")
                MiDGV.Rows.Add(Id, ESCALA, NBR, No)
            Next

    pero yo quiero que me lo haga es te bucle antes mencionado sin declarar nada ,conforme recorro columna las filas se llenan y así sucesivamente, SI TE DAS CUENTA EL DATASOURCE YA ESTA PERO PARA MIS INTERESES

    ES EL MEJOR COMO YO QUIERO

    ME EXPLICO GRACIAS, ESTE ES UN ARCHIVO DE PRACTICAS HASTA QUE SALGA BIEN ME INCORPORO

     
    viernes, 18 de mayo de 2018 0:54
  • Aquí también somos Chepe.

    Pues sus interes parecen contradecir las buenas prácticas de programación. :-)  Podría ayudarle a generar un algoritmo que conforme se agrega una columna, se agregan sus datos, pero eso implicaría que su programa iterará sobre las filas una cantidad de veces igual a filas * columnas, lo cual es un desperdicio de tiempo de procesador y una complicación en el código.  O sea, que si tiene 10 columnas y 30 registros (filas), tendremos 300 iteraciones cuando puede hacerse lo mismo con 40 (10 de las columnas, si es que se crean con un bucle, y 30 iteraciones para las filas).

    Para hacer el algoritmo que usted desea, hay que A. Crear las filas de antemano y luego se llenan, o B. en la primera iteración del bucle exterior se llenan y luego condicionar las demás iteraciones para que no creen filas adicionales.  De lo contrario tendríamos 300 filas para un escenario como el que propuse hipotéticamente en el párrafo anterior.

    Si aún así insiste, pues veré si saco tiempo para tal cosa. :-)  No trato de sonar arrogante, solamente que veo muy poca (o ninguna) utilidad en invertir tiempo en algo así.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 18 de mayo de 2018 1:12
    Moderador