DevComponents-Supergrid Maestro-detalle con base de datos SQL Compact 4.0

Que tal amigos programadores vb, en esta ocasión, les describo como mostrar el tipo Maestro-detalle usando el control supergrid que viene con el paquete de Dotnetbar Devcomponents. Aunque en los ejemplos que trae consigo este paquete, no siempre es fácil tratar de acoplarlo a nuestras necesidades con la mayor sencillez posible, siendo así les muestro como presentarlo de forma muy simple, tomando como base de datos una que yo tengo para mi uso y que la voy a incluir en este ejemplo.

Pues bien, le presento el código completo:
Dentro del modulo de llamada a la base de datos "CREDIT.sdf"

Module Module1
    Public path As String = System.AppDomain.CurrentDomain.BaseDirectory + "CREDIT.sdf"
    Public conn As New SqlServerCe.SqlCeConnection("Data Source=" & path + ";Password=database1;Max Database Size=4091")
    Public sql As String
    Public cmd As New SqlServerCe.SqlCeCommand(sql, conn)
    Public Sub conectarse()
        Try
            conn.Open()
            '  MsgBox("Conexion exitosa")
        Catch ex As Exception
            MsgBox(ex.ToString())
        End Try
        '   conn.Close()
    End Sub
End Module

Dentro del formulario:

Imports DevComponents.DotNetBar.SuperGrid

Public Class Form1
    Sub cargar_datos()
        Try
            conectarse()
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strSql As String = "SELECT TOP 5 * FROM PRESTAMOS"
            Dim strSql2 As String = "SELECT * FROM AMORTIZACION " ' WHERE NUM_PRESTAMO
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            '   Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            '  Dim adp2 As New SqlServerCe.SqlCeDataAdapter(strSql2, conn)
            CType(New SqlServerCe.SqlCeDataAdapter(strSql, conn), SqlServerCe.SqlCeDataAdapter).Fill(ds, "PRESTAMOS")
            CType(New SqlServerCe.SqlCeDataAdapter(strSql2, conn), SqlServerCe.SqlCeDataAdapter).Fill(ds, "AMORTIZACION")
            adp.Fill(dt)
            ds.Relations.Add("1", ds.Tables("PRESTAMOS").Columns("CODIGO"), ds.Tables("AMORTIZACION").Columns("CODIGO"), False)
            supergrid.PrimaryGrid.DataSource = ds
            contar()
            ' supergrid.PrimaryGrid.DataMember = "ORDERS"

        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
        contar()
    End Sub
    Sub contar()
        Try
            Dim i As Integer = supergrid.PrimaryGrid.Rows.Count
            lblcontador.Text = "Número de items =" & i
        Catch ex As Exception
        End Try

    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        cargar_datos()
    End Sub
    Public Sub buscar()
        Try
            Dim ds As New DataSet
            Dim dt As New DataTable
            Dim strSql, strSql2 As String
            If TextBox1.Text = "" Then
                MsgBox("Ingrese código para buscar", vbInformation)
            ElseIf IsNumeric(TextBox1.Text) = True Then
                strSql = "SELECT  * FROM PRESTAMOS WHERE CODIGO =" & TextBox1.Text
                strSql2 = "SELECT  * FROM AMORTIZACION WHERE CODIGO =" & TextBox1.Text
            End If
            CType(New SqlServerCe.SqlCeDataAdapter(strSql, conn), SqlServerCe.SqlCeDataAdapter).Fill(ds, "PRESTAMOS")
            CType(New SqlServerCe.SqlCeDataAdapter(strSql2, conn), SqlServerCe.SqlCeDataAdapter).Fill(ds, "AMORTIZACION")
            ds.Relations.Add("1", ds.Tables("PRESTAMOS").Columns("CODIGO"), ds.Tables("AMORTIZACION").Columns("CODIGO"), False)
            Dim adp As New SqlServerCe.SqlCeDataAdapter(strSql, conn)
            supergrid.PrimaryGrid.DataSource = ds
            contar()
        Catch ex As Exception
            ex.ToString()
        End Try
        conn.Close()
        StatusStrip2.Refresh()
        contar()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        buscar()
    End Sub
End Class

La relación de uno a varios es el tipo más común. En este tipo de relación, una fila de la tabla A puede tener muchas filas coincidentes en la tabla B, pero una fila de la tabla B solo puede tener una fila coincidente en la tabla A. Por ejemplo, las tablas "Editores" y "Títulos" tienen una relación de uno a varios. Es decir, cada editor produce muchos títulos. Pero a cada título le corresponde solo un editor.

Una relación uno a varios se crea si sólo una de las columnas relacionadas es una clave principal o tiene una restricción UNIQUE.


Les dejo unas capturas ejecutando:





Bueno, esto es todo, espero sus buenos comentarios, y sobre todo que les sirva, nos vemos en otra entrega
Adjunto mi ejemplor en el siguiente link
https://mega.nz/#!ANkW1LgB!SoWQF6zVEmKL1BFXgG4sLmnPI-2Jn-GvI4-c3_PFvKk

Comentarios

  1. Excelente ejemplo,lo adaptaré a Sql Server, gracias por tu contribución a la comunidad latinoamericana de desarrolladores ;)

    ResponderEliminar
    Respuestas
    1. Aquí esta el código en VB.NET! :D

      CAPA DATOS:
      ===========
      Public Shared Function MostrarMaestroDetalle() As DataSet
      Using con As New SqlConnection(ConfigurationManager.ConnectionStrings("con1").ToString())
      Dim ds As New DataSet
      'Dim dt As New DataTable
      Dim q1 As String = "SELECT * FROM CUSTOMERS"
      Dim q2 As String = "SELECT * FROM ORDERS"
      Dim q3 As String = "SELECT * FROM [Order Details]"

      Dim adp As New SqlDataAdapter(q1, con)
      Dim adp2 As New SqlDataAdapter(q2, con)
      Dim adp3 As New SqlDataAdapter(q3, con)
      adp.Fill(ds, "CUSTOMERS")
      adp2.Fill(ds, "ORDERS")
      adp3.Fill(ds, "DETAILS")

      ds.Relations.Add("1", ds.Tables("CUSTOMERS").Columns("CustomerID"), ds.Tables("ORDERS").Columns("CustomerID"), False)
      ds.Relations.Add("v", ds.Tables("ORDERS").Columns("OrderID"), ds.Tables("DETAILS").Columns("OrderID"), False)

      Return ds

      End Using
      End Function

      CAPA NEGOCIOS
      ==============
      Public Shared Function MostrarMaestroDetalle() As DataSet
      Return dCustomer.MostrarMaestroDetalle()
      End Function

      CAPA PRESENTACION (EN EL FORMULARIO)
      ==================

      Me.superGridControl1.PrimaryGrid.DataSource = nCustomer.MostrarMaestroDetalle()

      Eliminar
  2. Buen ejemplo,lo adapté para sql server, sin capas, en una clase creé la función para llamarlo en el formulario:

    Public Class Class_cierre_periodo
    Inherits Class_conexion

    Function listar()
    Dim ds As New DataSet
    'Dim dt As New DataTable
    Dim q1 As String = "select idpartida, numero,nombre_partida from PARTIDAS_CONTABLES where estado = 'A'"
    Dim q2 As String = "select id_item_partida ,idpartida, numero ,nombre_item from PARTIDA_CONTABLE_ITEMS "
    Dim q3 As String = " Select d.fecha,d.descripcion,d.fecha_emisión,d.monto,d.idpartida, part.idpartida From DETALLE_INGRESO_GASTO As d inner Join PARTIDA_CONTABLE_ITEMS As pii On pii.id_item_partida = d.idpartida Left Join PARTIDAS_CONTABLES As part On part .idpartida = pii.idpartida"

    Dim adp1 As New SqlClient.SqlDataAdapter(q1, cn)
    Dim adp2 As New SqlClient.SqlDataAdapter(q2, cn)
    Dim adp3 As New SqlClient.SqlDataAdapter(q3, cn)
    adp1.Fill(ds, "PARTIDAS_CONTABLES")
    adp2.Fill(ds, "PARTIDA_CONTABLE_ITEMS")
    adp3.Fill(ds, "DETALLE_INGRESO_GASTO")

    ds.Relations.Add("1", ds.Tables("PARTIDAS_CONTABLES").Columns("idpartida"), ds.Tables("PARTIDA_CONTABLE_ITEMS").Columns("idpartida"), False)
    ds.Relations.Add("v", ds.Tables("PARTIDA_CONTABLE_ITEMS").Columns("id_item_partida"), ds.Tables("DETALLE_INGRESO_GASTO").Columns("idpartida"), False)

    Return ds
    End Function

    End Class

    en el formulario llamo a la clase :

    ' istancio la clase en un nuevo objeto:
    Dim obj_cierres_ciclo As New Class_cierre_periodo

    ' creo un dataset
    Dim dt_listar As New DataSet

    'invoco a la clase listar :
    dt_listar = obj_cierres_ciclo.listar()
    Me.SuperGridControl1.PrimaryGrid.DataSource = dt_listar


    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Imprimir directamente ReportViewer a impresora predeterminada

DevComponents DotnetBar 12.5.0.2

Metodo Iterativo Gauss-Seidel en Visual Basic