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"
Dentro del formulario:
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
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
Excelente ejemplo,lo adaptaré a Sql Server, gracias por tu contribución a la comunidad latinoamericana de desarrolladores ;)
ResponderEliminarAquí esta el código en VB.NET! :D
EliminarCAPA 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()
Buen ejemplo,lo adapté para sql server, sin capas, en una clase creé la función para llamarlo en el formulario:
ResponderEliminarPublic 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