domingo, 23 de octubre de 2016

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