none
vb.net llenar un datagrid en 3 capas? RRS feed

  • Pregunta

  • hola quiero llenar un data grid en 3 capas, pero no puedo nesecitaria su ayuda aca les mando el codigo que realice

    capa datos
    Public Class conexion
    Dim con As New SqlConnection("Data Source=GUILLE-3D60AB6D\SQLEXPRESS;Initial Catalog=lubricentro;Integrated Security=SSPI;")
    Dim Cmd As New SqlCommand
    Dim Lec As SqlDataReader
    Public Function conectar()
    Try
    Cmd.Connection = con
    con.Close()
    Return True
    Catch ex As Exception
    Return False
    End Try
    End Function
    Public Function consultar(ByVal consulta As String)
    Dim result
    conectar()
    Cmd.CommandText = consulta
    con.Open()
    Lec = Cmd.ExecuteReader

        result = Lec.Read()
    
        Lec.Close()
        con.Close()
    
        Return result
    End Function
    

    End Class

    clase de productos

    Public Function mostrarproductos()
        Dim consulta = ("SELECT * FROM Productos")
        mostrarproductos = con.consultar(consulta)
    
    End Function
    

    aca va logica

    Public Function verdatos()

        verdatos = mos.mostrarproductos
    
        Return True
    End Function
    

    y aplicacion
    Public Sub mostrardatos()
    Dim prod As New logica.productosLis

        dgwmostrar.DataSource = prod.verdatos()
    
    End Sub
    

    espero su ayuda muchas gracias


    Guillermo

    miércoles, 18 de septiembre de 2013 21:33

Respuestas

  • Tal como lo tienes, desde la capa de datos estás devolviendo al llamante un valor booleano. Es decir, devuelves "lec.read", que devuelve true si consigue leer un registro y false si no lo consigue. Y a continuación cierras el datareader y la conexión, por lo que nunca lees ningún dato.

    En su lugar, define una estructura de datos para encapsular la información deseada, y en la capa de datos usa un bucle "while lec.read()" para iterar sobre todos los registros leídos y meterlos uno por uno en la estructura de datos. Después, devuelves esa estructura a la capa superior. Y si la estructura está bien pensada (es un IEnumerable de objetos que exponen las columnas como propiedades) entonces puedes asignarla directamente al datasource del grid para que se vean los registros.

    jueves, 19 de septiembre de 2013 8:51
  • me decis de armar un arregl y pasar los datos en un while para despues ponerlo en el dataset

    Usualmente suele ser más simple usar un List(Of tipoRegistro) en lugar de un arreglo, porque el arreglo tiene dimensión fija y por lo tanto no se puede ir haciendo crecer a cada iteración del while. Y la idea es que ese List se puede después asignar directamente al DataSource del grid, sin necesidad de pasarlo en nigún momento a un DataSet.

    No obstante, si prefieres usar DataSets, entonces lo que harías es suprimir el SqlDataReader y usar en su lugar un SqlDataAdapter (que internamente ya usa un SqlDataReader para iterar por los registros y meterlos en un DataSet). Después, sería ese mismo DataSet el que pasarías a la capa superior y en última instancia lo enlazarías con el Grid. Pero aviso que este tipo de programación basada en DataSets se considera hoy en día "anticuada". En su lugar se usan clases personalizadas por cada tipo de entidad que se deba transferir entre capas, que es precisamente lo que comentaba antes al hablar del List(of tipoRegistro). Ese "tipoRegistro" es una clase que tienes que definir en tu código y que tiene una propiedad por cada campo de la tabla. Construir estas clases a mano es una pesadez, sobre todo si tienes muchas tablas. Pero para eso hay herramientas que lo hacen automáticamente (ORM - Object Relational Mapper). Con Visual Studio se incluye Entity Framework, que realiza automáticamente la generación de todas las clases necesarias y también aporta el código que las lee y graba desde base de datos. Usando Entity Framework (u otra herramienta similar) te puedes ahorrar entera toda la capa de datos, porque Visual Studio la genera con unos pocos clicks de ratón.

    viernes, 20 de septiembre de 2013 5:55

Todas las respuestas

  • Tal como lo tienes, desde la capa de datos estás devolviendo al llamante un valor booleano. Es decir, devuelves "lec.read", que devuelve true si consigue leer un registro y false si no lo consigue. Y a continuación cierras el datareader y la conexión, por lo que nunca lees ningún dato.

    En su lugar, define una estructura de datos para encapsular la información deseada, y en la capa de datos usa un bucle "while lec.read()" para iterar sobre todos los registros leídos y meterlos uno por uno en la estructura de datos. Después, devuelves esa estructura a la capa superior. Y si la estructura está bien pensada (es un IEnumerable de objetos que exponen las columnas como propiedades) entonces puedes asignarla directamente al datasource del grid para que se vean los registros.

    jueves, 19 de septiembre de 2013 8:51
  • me decis de armar un arregl y pasar los datos en un while para despues ponerlo en el dataset

    Guillermo

    jueves, 19 de septiembre de 2013 22:07
  • me decis de armar un arregl y pasar los datos en un while para despues ponerlo en el dataset

    Usualmente suele ser más simple usar un List(Of tipoRegistro) en lugar de un arreglo, porque el arreglo tiene dimensión fija y por lo tanto no se puede ir haciendo crecer a cada iteración del while. Y la idea es que ese List se puede después asignar directamente al DataSource del grid, sin necesidad de pasarlo en nigún momento a un DataSet.

    No obstante, si prefieres usar DataSets, entonces lo que harías es suprimir el SqlDataReader y usar en su lugar un SqlDataAdapter (que internamente ya usa un SqlDataReader para iterar por los registros y meterlos en un DataSet). Después, sería ese mismo DataSet el que pasarías a la capa superior y en última instancia lo enlazarías con el Grid. Pero aviso que este tipo de programación basada en DataSets se considera hoy en día "anticuada". En su lugar se usan clases personalizadas por cada tipo de entidad que se deba transferir entre capas, que es precisamente lo que comentaba antes al hablar del List(of tipoRegistro). Ese "tipoRegistro" es una clase que tienes que definir en tu código y que tiene una propiedad por cada campo de la tabla. Construir estas clases a mano es una pesadez, sobre todo si tienes muchas tablas. Pero para eso hay herramientas que lo hacen automáticamente (ORM - Object Relational Mapper). Con Visual Studio se incluye Entity Framework, que realiza automáticamente la generación de todas las clases necesarias y también aporta el código que las lee y graba desde base de datos. Usando Entity Framework (u otra herramienta similar) te puedes ahorrar entera toda la capa de datos, porque Visual Studio la genera con unos pocos clicks de ratón.

    viernes, 20 de septiembre de 2013 5:55