Una Aplicacion en 3 Capas
-
Upload
alberto-moreno-cueva -
Category
Documents
-
view
7.684 -
download
2
description
Transcript of Una Aplicacion en 3 Capas
![Page 1: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/1.jpg)
http://www.desarrolladoras.com - [email protected]
Desarrollo de una aplicaciónDesarrollo de una aplicaciónen tres capasen tres capas
con interfase Cliente Windows,con interfase Cliente Windows,uso de Data Access A. Blocks, uso de Data Access A. Blocks,
DataSets tipadosDataSets tipadosy ...y ...
![Page 2: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/2.jpg)
http://www.desarrolladoras.com - [email protected]
otras yerbas…otras yerbas…
por Vilma Hinterwimmerpor Vilma Hinterwimmer
[email protected]@desarrolladoras.com
por Vilma Hinterwimmerpor Vilma Hinterwimmer
[email protected]@desarrolladoras.com
En el día de la Tradición…En el día de la Tradición…¿nos darán un mate al menos …?¿nos darán un mate al menos …?
Inspirada en la Aplicación Pachacamac de Daniel Seara.
Gracias Daniel por enseñarnos tanto!
![Page 3: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/3.jpg)
http://www.desarrolladoras.com - [email protected]
Temas a tratar.... Temas a tratar.... si llegamos a tiempo!si llegamos a tiempo!
• Identificando las capas y los proyectos
• Creando la solución y los proyectos
• DataSet tipados
• Donde almacenamos la cadena de conexión
• Usando el Data Access Application Blocks
![Page 4: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/4.jpg)
http://www.desarrolladoras.com - [email protected]
…….mas temas.mas temas
• La Clase Entidad y sus derivadas
• Herencia de Formularios
• Armado de un formulario tipo Outlook Express
• Principales propiedades, métodos y eventos de algunos controles
![Page 6: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/6.jpg)
http://www.desarrolladoras.com - [email protected]
Cliente
Webo
Windows
Negocio
Reglasy
Entidades
Datos
DAAB
Identificando las capasIdentificando las capas
Usuario Repositorio de DatosAplicación
![Page 7: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/7.jpg)
http://www.desarrolladoras.com - [email protected]
Negocio
Reglas de negocio
Entidades
Clases cuyos métodos implementan las reglas de negocio globales
Clases bases y sus heredades que definen los objetos a utilizar en la aplicación: Cliente, Proveedor, Factura, etc.
CapasCapas Cliente
Interfaz gráfica con el Usuario, puede ser Web o Windows
Datos
Acceso a repositorios de Datos directo o a través del DAAB
![Page 8: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/8.jpg)
http://www.desarrolladoras.com - [email protected]
Creando la solución y los proyectosCreando la solución y los proyectos
Cliente Negocio Datos
• Creamos una Solución en blanco
• Agregamos los Proyectos:
Nombre del proyecto Tipo de proyecto
Alumnos Aplicación para Windows AluNegocio Biblioteca de Clases
AluDatos Biblioteca de ClasesAluGlobal Biblioteca de ClasesData Access Application Block Existente
![Page 9: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/9.jpg)
http://www.desarrolladoras.com - [email protected]
Relación entre las capas y los proyectosRelación entre las capas y los proyectos
Cliente
Negocio
Cliente Negocio Datos
ALUMNOS
ALU
NEGOCIO
ALUGLOBAL
Proyecto Capa Referencias entre proyectos
DAAB
ALU
DATOS
APLICACION
![Page 11: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/11.jpg)
http://www.desarrolladoras.com - [email protected]
DataSets tipadosDataSets tipados
La difícil tarea de crear DataSets tipados
en tan solo 4 Pasos...
![Page 13: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/13.jpg)
http://www.desarrolladoras.com - [email protected]
2.Agregar una conexión a datos en el Explorador de Servidores
![Page 14: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/14.jpg)
http://www.desarrolladoras.com - [email protected]
Dos pasos mas Dos pasos mas para llegar a tener...para llegar a tener...
¡Un DataSet Tipado!¡Un DataSet Tipado!
![Page 15: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/15.jpg)
http://www.desarrolladoras.com - [email protected]
3.Agregar la definición de la tabla al DataSet tipado ( drag and drop – arrastrar y soltar )
![Page 16: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/16.jpg)
http://www.desarrolladoras.com - [email protected]
4.Generar la clase (Generar conjunto de datos)
y..... LISTO!!!!!y..... LISTO!!!!!
![Page 17: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/17.jpg)
http://www.desarrolladoras.com - [email protected]
Este es nuestro DataSet tipadoEste es nuestro DataSet tipado
Un archivo .vb que contiene una clase...
la escribió Visual Studio por nosotros...
y ahora la podemos usar....
![Page 18: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/18.jpg)
http://www.desarrolladoras.com - [email protected]
y...y...
¿Para que sirve¿Para que sirve un Dataset Tipado? un Dataset Tipado?
Para facilitarnos...Para facilitarnos...
¡LA VIDA!¡LA VIDA!
![Page 19: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/19.jpg)
http://www.desarrolladoras.com - [email protected]
Escribiendo código Escribiendo código con uncon un
DataSet tipado DataSet tipado
![Page 20: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/20.jpg)
http://www.desarrolladoras.com - [email protected]
Tabla o Procedimiento Almacenado
TCliente
Nombre del Campo
Tipo del Campo
Nombre varchar
Direccion varchar
Saldo decimal
Clave varbinary
Sucursal smallint
La definición del dataset ahora será
Dim dstCliente As New dsCliente
La tabla será dstCliente.TCliente
A los campos de la fila n los llamamos:
dstCliente.TCliente(n).NombredstCliente.TCliente(n).DirecciondstCliente.TCliente(n).SaldodstCliente.TCliente(n).ClavedstCliente.TCliente(n).Sucursal
![Page 21: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/21.jpg)
http://www.desarrolladoras.com - [email protected]
donde antes escribíamos…
ahora podemos a escribir…..
donde antes escribíamos…
ahora podemos a escribir…..
ComboBox1.DataSource = dstCliente.Tables( _ “TCliente”)
ComboBox1.DataSource = dstCliente.TCliente
txtnombre.Text = dstCliente.Tables( _ “TCliente”).Rows(n).Item(0).ToString
txtnombre.Text = dstCliente.TCliente(n).Nombre
![Page 22: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/22.jpg)
http://www.desarrolladoras.com - [email protected]
¿Donde guardamos la ¿Donde guardamos la cadena de conexión?cadena de conexión?
![Page 23: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/23.jpg)
http://www.desarrolladoras.com - [email protected]
Almacenaremos la cadena de conexión Almacenaremos la cadena de conexión en el archivo de configuraciónen el archivo de configuración
de la Aplicaciónde la Aplicación
¿A que proyecto lo agregamos?
Al proyecto...
ALUMNOS
![Page 24: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/24.jpg)
http://www.desarrolladoras.com - [email protected]
Agregamos un archivo App.Config Agregamos un archivo App.Config al Proyecto Alumnos (Capa Cliente)al Proyecto Alumnos (Capa Cliente)
![Page 25: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/25.jpg)
http://www.desarrolladoras.com - [email protected]
Agregamos la clave y el valor de la cadena de Agregamos la clave y el valor de la cadena de conexión al archivo de configuraciónconexión al archivo de configuración
<appSettings>
<add key=“StrConn“
value="server=MiServidor;database=DB
;trusted_connection=true"/>
</appSettings>
![Page 26: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/26.jpg)
http://www.desarrolladoras.com - [email protected]
Así se verá en el Visual Studio nuestroAsí se verá en el Visual Studio nuestro archivo de configuraciónarchivo de configuración
Habría que encriptar la cadena de configuración para guardarla en el Archivo de Configuración.
Lo dejaremos para el próximo evento...
![Page 27: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/27.jpg)
http://www.desarrolladoras.com - [email protected]
Accedemos al valor desde el códigoAccedemos al valor desde el código
Dim strconn as String = _
Configuration.ConfigurationSettings.AppSettings( _
“StrConn")
![Page 28: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/28.jpg)
http://www.desarrolladoras.com - [email protected]
Data AccessData AccessApplication BlocksApplication Blocks
![Page 29: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/29.jpg)
http://www.desarrolladoras.com - [email protected]
La clase y los métodos La clase y los métodos principalesprincipales
Clase SqlHelperClase SqlHelper
Métodos Métodos
ExecuteReader
ExecuteNonQuery
ExecuteDataset
FillDataset
![Page 30: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/30.jpg)
http://www.desarrolladoras.com - [email protected]
ExecuteReaderExecuteReader
Devuelve un SQLDataReader con el cual accedemos a las filas
ExecuteReader(ByVal connectionString As String, _ ByVal commandType As CommandType, _ ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter)
ExecuteNonQueryExecuteNonQuery
Devuelve el numero de filas afectadas
ExecuteNonQuery(ByVal connectionString As String, _ ByVal commandType As CommandType,
ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter)
![Page 31: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/31.jpg)
http://www.desarrolladoras.com - [email protected]
ExecuteDatasetExecuteDataset
Devuelve un DataSet
ExecuteDataset(ByVal connectionString As String, _ ByVal commandType As CommandType, _ ByVal commandText As String, _ ByVal ParamArray commandParameters() As SqlParameter)
FillDatasetFillDataset
Llena de datos un DataSet que le pasamos como argumento, no devuelve ningún valor
FillDataset(connectionString As String, commandType As CommandType, _ commandText As String, _ dataSet As DataSet, _ tableNames() As String, _ ByVal ParamArray commandParameters() As SqlParameter)
![Page 32: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/32.jpg)
http://www.desarrolladoras.com - [email protected]
EjemplosEjemplos
ExecuteReaderExecuteReader
Imports Microsoft.ApplicationBlocks.Data.SqlHelper
... Dim drCat1 As SqlDataReaderdrCat1 = SqlHelper.ExecuteReader( strconn, _ CommandType.StoredProcedure, _ "GetProductsByCategory", _ New SqlParameter("@CategoryID", 1))
...drCat1.Close()
![Page 33: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/33.jpg)
http://www.desarrolladoras.com - [email protected]
EjemplosEjemplos
ExecuteNonQueryExecuteNonQuery
Imports Microsoft.ApplicationBlocks.Data.SqlHelper
Public Shared Function GrabarCliente(ByVal cliente As String) _ as Integer
Dim Params(0) As SqlParameterParams(0) = New SqlParameter("@NomCliente", _
SqlDbType.VarChar, 50) Params(0).Value = cliente Return ExecuteNonQuery( strconn, _ CommandType.StoredProcedure, _ “Clientes_Insert", Params)End Function
![Page 34: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/34.jpg)
http://www.desarrolladoras.com - [email protected]
EjemplosEjemplos
ExecuteDatasetExecuteDataset
Imports Microsoft.ApplicationBlocks.Data.SqlHelper
Public Shared Function LeerTodos( ) As DataSet Return ExecuteDataset( strconn,CommandType.StoredProcedure, _ “Clientes_GetAll“)End Function
![Page 35: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/35.jpg)
http://www.desarrolladoras.com - [email protected]
EjemplosEjemplos
FillDatasetFillDataset
Imports Microsoft.ApplicationBlocks.Data.SqlHelper
Public Shared Function LeerTodos( ByVal ds as Dataset ) _As DataSet
Dim strTabla() As String = {“Parametros_GetAll"} FillDataset( strconn, CommandType.StoredProcedure, _
"Parametros_GetAll", ds, strTabla) Return ds End Function
![Page 37: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/37.jpg)
http://www.desarrolladoras.com - [email protected]
Escribiendo el código de la Escribiendo el código de la Capa de DatosCapa de Datos
1. Agregamos una clase al proyecto AluDatos.
2. Esta clase va a tener varios métodos compartidos para las distintas operaciones que necesitemos hacer sobre la Base de Datos.
TraerDataSet
Actualizar
Borrar
GuardarValor
![Page 38: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/38.jpg)
http://www.desarrolladoras.com - [email protected]
Escribiendo el código de la Escribiendo el código de la Capa de DatosCapa de Datos
Public Class CGrlDatos
Shared ConnAlu As String = _ Configuration.ConfigurationSettings.AppSettings("ConnALU")
Public Shared Function TraerDataset( _ ByVal entidad As String) As DataSet Try Return ExecuteDataset(ConnAlu, _ CommandType.StoredProcedure, entidad & "_GetAll") Catch ex As Exception
Throw ex End Try End Function...End Class
![Page 40: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/40.jpg)
http://www.desarrolladoras.com - [email protected]
Escribiendo el código de la Escribiendo el código de la Capa NegocioCapa Negocio
1.Agregamos una Clase CEntidad al proyecto AluNegocio.
2.Va a ser la Clase base de la cual vamos a heredar para crear mas fácilmente las demás.
3.Esta Clase va a estar compuesta por:
Declaración de Variables
Un constructor
Propiedades
Métodos
![Page 41: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/41.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidad
Public Class CEntidad
Declaración de Variables
Constructores
Propiedades
Metodos
End Class
![Page 42: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/42.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadVariablesVariables
#Region "Declaración de Variables“
Friend mNomEnt As StringFriend mId As IntegerProtected Friend mDatos As DataRowProtected Friend mTDatos As DataSet
#End Region
![Page 43: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/43.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadConstructorConstructor
#Region "Constructores"
Sub New(ByVal NombreEntidad As String)mNomEnt = NombreEntidad
End Sub
#End Region
![Page 44: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/44.jpg)
http://www.desarrolladoras.com - [email protected]
CCllaassee
CCEEnnttiiddaad d
#Region "Propiedades"
Public Overridable Property Id() As Integer Get
Return mId End Get
Set(ByVal Value As Integer)Try mId = Value CGrlDatos.TraerDataset(mTDatos, mNomEnt, mId) If mTDatos.Tables(0).Rows.Count > 0 Then
mDatos = mTDatos.Tables(0).Rows(0) Else
mDatos = mTDatos.Tables(0).NewRowmTDatos.Tables(0).Rows.Add(mDatos)
End If Catch ex As Exception
Throw ex End Try
End Set End Property
#End Region
PPrrooppiieeddaaddeess
![Page 45: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/45.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadMétodosMétodos
Public Overridable Function TraerTodos() As DataSetTry
Return CGrlDatos.TraerDataset(New DataSet, _mNomEnt, mNomEnt & "_GetAll")
Catch ex As ExceptionThrow ex
End TryEnd Function
Public Overridable Function TraerLista() As DataSetTry
Return CGrlDatos.TraerDataset(New DataSet, _ mNomEnt, mNomEnt & "_GetList")
Catch ex As ExceptionThrow ex
End TryEnd Function
![Page 46: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/46.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadMétodosMétodos
Public Overridable Function TraerUno() As DataSetTry
Return CGrlDatos.TraerDataset(New DataSet, _ mNomEnt & "_GetByNro" & _ mNomEnt.PadLeft(3), Me.Id)
Catch ex As ExceptionThrow ex
End TryEnd Function
![Page 47: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/47.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadMétodosMétodos
Public Overridable Sub Actualizar()Try Dim DatosUno() As Object = _
mTDatos.Tables(0).Rows(0).ItemArray() If Me.Id <> -1 Then
CGrlDatos.Actualizar(mDatos, mNomEnt & "_Update") Else
CGrlDatos.ActualizarSal(mDatos, mNomEnt & "_Insert")Me.Id = DatosUno(0)
End IfCatch ex As Exception
Throw exEnd Try
End Sub
![Page 48: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/48.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CEntidadClase CEntidadMétodosMétodos
Public Overridable Function Eliminar(ByVal Id As Integer, _ ByVal nomparam As Array) As Integer
Try Return CGrlDatos.Borrar(nomparam, _
mNomEnt & "_Delete", Id)Catch ex As Exception Throw exEnd Try
End Function
![Page 49: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/49.jpg)
http://www.desarrolladoras.com - [email protected]
Escribiendo el código de la Escribiendo el código de la Capa NegocioCapa Negocio
1. Agregamos una Clase por cada entidad que necesitemos, en este caso Alumnos, Curso, Asignaturas, Localidades, Paises, etc... al proyecto AluNegocio.
2. Estas Clases van a heredar de la Clase base CEntidad
3. Cada una de estas Clases va a estar compuesta por:
Declaración de Variables
Un constructor
Propiedades
Métodos
![Page 50: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/50.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CPaisClase CPais
Public Class CPais
Inherits ALU.AluNegocio.CEntidad
Declaración de Variables
Constructores
Propiedades
Actualización
End Class
![Page 51: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/51.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CPaisClase CPaisVariablesVariables
#Region "Declaración de Variables“
Protected Friend mTodosDatos As New dsPaisesPrivate Pais As dsPaises.PaisesRow
#End Region
![Page 52: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/52.jpg)
http://www.desarrolladoras.com - [email protected]
#Region "Constructores"
Sub New(ByVal value As Integer) MyBase.New("Paises") Try
MyBase.mId = valuemTodosDatos.Clear()CGrlDatos.TraerDataset(mTodosDatos, mNomEnt,
value)If mTodosDatos.Tables(0).Rows.Count = 0 Then
Pais = mTodosDatos.Paises.NewPaisesRowPais.PaiNroPai = -1Pais.PaiDesc = ""
ElsePais = mTodosDatos.Paises.Rows(0)
End IfMyBase.mTDatos = mTodosDatosMyBase.mDatos = Pais
Catch ex As ExceptionThrow ex
End Try End Sub#End Region
CCllaassee
CCPPaaiis s
CCoonnssttrruuccttoorr
![Page 53: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/53.jpg)
http://www.desarrolladoras.com - [email protected]
CCllaassee
CCPPiiaas s
#Region "Propiedades"
Public Overrides Property Id() As IntegerGet
Return MyBase.mIdEnd Get
Set(ByVal Value As Integer)MyBase.mId = Value
End SetEnd Property
Public Property Desc() As StringGet
Return Pais.PaiDescEnd GetSet(ByVal Value As String)
Pais.PaiDesc = ValueEnd Set
End Property
#End Region
PPrrooppiieeddaaddeess
![Page 54: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/54.jpg)
http://www.desarrolladoras.com - [email protected]
Clase CPaisClase CPaisMétodosMétodos
#Region "Actualización"
Public Overrides Sub Actualizar()Try If Me.Id > 0 Then
CGrlDatos.Actualizar(Pais, Me.mNomEnt & "_Update") Else
mId = CGrlDatos.ActualizarSal(Pais, _ Me.mNomEnt & "_Insert")
End IfCatch ex As Exception Throw exEnd Try
End Sub
#End Region
![Page 57: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/57.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario BaseFormulario Base
Public Class CUsuario
Inherits USU.Negocio.CEntidad
• Creamos un Formulario del cual van a heredar la mayoría de los Formularios de nuestra Aplicación
• Colocamos este Formulario en el Proyecto AluGlobal para poder hacer referencia a él desde el Proyecto Alumnos y cualquier otro Proyecto que agreguemos en la capa Cliente.
• Agregamos a este Formulario todas las cosas que se van a repetir en todos los formularios. Icono del Sistema, Nombre de la Empresa, etc...
• Generamos la solución para que se genere el Assembly y así poder heredarlo
• Creamos un Formulario del cual van a heredar la mayoría de los Formularios de nuestra Aplicación
• Colocamos este Formulario en el Proyecto AluGlobal para poder hacer referencia a él desde el Proyecto Alumnos y cualquier otro Proyecto que agreguemos en la capa Cliente.
• Agregamos a este Formulario todas las cosas que se van a repetir en todos los formularios. Icono del Sistema, Nombre de la Empresa, etc...
• Generamos la solución para que se genere el Assembly y así poder heredarlo
![Page 58: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/58.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario HeredadoFormulario Heredado
Agregamos un Formulario que va a heredar todas las características de nuestro Formulario Base
![Page 59: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/59.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario HeredadoFormulario Heredado
También podríamos haber elegido Formulario Heredado del cuadro de diálogo Agregar Nuevo Elemento
Elegimos el Formulario del cual vamos a heredar
![Page 60: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/60.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario HeredadoFormulario Heredado
• Ya tenemos nuestro Formulario Heredado
• Todo lo que agregamos en el Formulario Base va a estar en todos los formularios heredados del mismo.
• Ahora nos dedicamos a agregarle a los Formularios heredados los controles particulares del mismos sin tener que preocuparnos que las cosas generales queden en distinto formato en los distintos formularios de la aplicación.
• Ya tenemos nuestro Formulario Heredado
• Todo lo que agregamos en el Formulario Base va a estar en todos los formularios heredados del mismo.
• Ahora nos dedicamos a agregarle a los Formularios heredados los controles particulares del mismos sin tener que preocuparnos que las cosas generales queden en distinto formato en los distintos formularios de la aplicación.
No tendremos que volver a agregar estos controles No tendremos que volver a agregar estos controles y este código nunca mas!y este código nunca mas!
Todos van a ser iguales!Todos van a ser iguales!
![Page 61: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/61.jpg)
http://www.desarrolladoras.com - [email protected]
Armado de un Formulario Armado de un Formulario
estiloestilo“Outlook Express”“Outlook Express”
![Page 62: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/62.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario estilo Formulario estilo “Outlook Express”“Outlook Express”
Es fácil!!!Son sólo 10 pasos
![Page 63: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/63.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario estilo “Outlook Express”Formulario estilo “Outlook Express”
1. Colocar en el Formulario todos los controles que vayan pegados sobre sus bordes. ToolBar, StatusBar, etc...
2. Colocar un control Panel y cambiar su propiedad Dock a Left
3. Colocar un control Splitter en el Formulario y cambiar su propiedad Dock a Left
4. Colocar un control ListView en el Formulario y cambiar su propiedad Dock a Fill
1. Colocar en el Formulario todos los controles que vayan pegados sobre sus bordes. ToolBar, StatusBar, etc...
2. Colocar un control Panel y cambiar su propiedad Dock a Left
3. Colocar un control Splitter en el Formulario y cambiar su propiedad Dock a Left
4. Colocar un control ListView en el Formulario y cambiar su propiedad Dock a Fill
![Page 64: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/64.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario estilo “Outlook Express”Formulario estilo “Outlook Express”
5. Colocar un control Panel dentro del primer Panel y cambiar su propiedad Dock a Top
6. Colocar un control Splitter dentro del primer Panel y cambiar su propiedad Dock a Top
7. Colocar otro control Panel dentro del primer Panel y cambiar su propiedad Dock a Fill
5. Colocar un control Panel dentro del primer Panel y cambiar su propiedad Dock a Top
6. Colocar un control Splitter dentro del primer Panel y cambiar su propiedad Dock a Top
7. Colocar otro control Panel dentro del primer Panel y cambiar su propiedad Dock a Fill
Sólo faltan 3 pasos mas...
![Page 65: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/65.jpg)
http://www.desarrolladoras.com - [email protected]
Formulario estilo “Outlook Express”Formulario estilo “Outlook Express”
8. Dentro de cada uno de los dos últimos Panel que colocamos, colocar un control Button y cambiar su propiedad Dock a Top
9. Colocar un control TreeView dentro de cada uno de los 2 últimos Panel y cambiar su propiedad Dock a Fill
10.Colocar 2 controles ImageList en el formulario
8. Dentro de cada uno de los dos últimos Panel que colocamos, colocar un control Button y cambiar su propiedad Dock a Top
9. Colocar un control TreeView dentro de cada uno de los 2 últimos Panel y cambiar su propiedad Dock a Fill
10.Colocar 2 controles ImageList en el formulario
Listo!!!
Ahora sólo falta escribir un poquito para llenar de datos los controles y para que además funcionen...
![Page 66: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/66.jpg)
http://www.desarrolladoras.com - [email protected]
PrincipalesPrincipales
Propiedades, Propiedades, Métodos y Métodos y Eventos Eventos
de algunos Controlesde algunos Controles
![Page 67: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/67.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
ImageListImageListPropiedades
Images: Colección de imágenes, aquí se cargan los Iconos
ImageSize: Cambiando esta propiedad podemos hacer que los Iconos se vean mas chicos o mas grandes
![Page 68: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/68.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
TreeViewTreeViewPropiedades
ImageList: Asignar el nombre del ImageList del cual se van a tomar los Iconos a mostrar
ItemHeight: Altura de cada nodo
![Page 69: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/69.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
TreeViewTreeViewPropiedades
Nodes: Colección de nodos, creamos los nodos, le asignamos el texto a mostrar y el índice de icono. También podemos hacer esto por código
SelectedNode: Nodo seleccionado en un instante dado
![Page 70: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/70.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
TreeViewTreeViewMétodos
GetNodeAt: Devuelve el nodo, si existe, que se encuentra en el lugar donde se hizo click en base a las coordenadas x e y
ExpandAll: Expande todos los nodos del árbol
![Page 71: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/71.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
TreeViewTreeViewEventos
AfterSelected: Se produce luego de seleccionar un nuevo nodo
MouseDown: Se produce al presionar cualquier botón del mouse. Lo utilizamos para saber si hizo click sobre un nodo o no y para cambiar de nodo seleccionado apretando cualquier botón del mouse
![Page 72: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/72.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
ListViewListViewPropiedades
LargeImageList: Asignar el nombre del ImageList del cual se van a tomar los Iconos a mostrar de tamaño grande
SmallImageList: Asignar el nombre del ImageList del cual se van a tomar los Iconos a mostrar de tamaño pequeño
![Page 73: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/73.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
ListViewListViewPropiedades
View: Estilo de Vista en la que se muestra el ListView
SelectedItems: Colección de elementos seleccionados en el control en un instante dado
![Page 74: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/74.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
ListViewListViewEventos
SelectedIndexChanged: Se produce al cambiar el elemento seleccionado
![Page 75: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/75.jpg)
http://www.desarrolladoras.com - [email protected]
Principales Propiedades, Métodos y Eventos Principales Propiedades, Métodos y Eventos de algunos controles de algunos controles
SplitterSplitter
Eventos
SplitterMoved: Se produce al arrastrar el Splitter
![Page 76: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/76.jpg)
http://www.desarrolladoras.com - [email protected]
Links útiles:Links útiles:Universidad.NetUniversidad.Net:
http://www.microsoft.com/spanish/msdn/comunidad/uni.net/
Sitio de Microsoft dedicado a .Net Windows Forms:Sitio de Microsoft dedicado a .Net Windows Forms:
http://www.windowsforms.net
Data Access Aplication Blocks:Data Access Aplication Blocks:
http://msdn.microsoft.com/library/en-us/dnbda/html/daab-rm.asp?frame=true
http://www.gotdotnet.com/Workspaces/Workspace.aspx?id=c20d12b0-af52-402b-9b7c-aaeb21d1f431
Desarrollador Cinco Estrellas:Desarrollador Cinco Estrellas:
http://www.microsoft.com/spanish/msdn/comunidad/dce/default.asp
PanoramaBox:PanoramaBox: http://www.panoramabox.com/
![Page 77: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/77.jpg)
http://www.desarrolladoras.com - [email protected]
![Page 78: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/78.jpg)
http://www.desarrolladoras.com - [email protected]
Muchas Gracias
desarrolladoras
www.desarrolladoras.com
![Page 79: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/79.jpg)
http://www.desarrolladoras.com - [email protected]
Clases Instanciadas Clases Instanciadas versus versus
Clases CompartidasClases Compartidas
![Page 80: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/80.jpg)
http://www.desarrolladoras.com - [email protected]
Clases CompartidasClases Compartidas
1. Las clases NO pueden ser compartidas. Sus métodos, propiedades y variables SI pueden serlo
2. Para que un Método, Propiedad y/o Variable sean compartidos debemos calificarlos con la palabra reservada SHARED
3. Un Método, Propiedad y/o Variable compartidos pueden ser usados en cualquier parte del código sin necesidad de crear un nuevo objeto, haciendo referencia al mismo a través del nombre de la clase. Ej: MiClase.MiMetodo()
![Page 81: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/81.jpg)
http://www.desarrolladoras.com - [email protected]
Clases CompartidasClases Compartidas
Public Class MiClase
Public Shared MiVariable As String
Public Shared Sub MiMetodo()MiVariable = "Hola Mundo"
End Sub
End Class
Public Class OtraClase
Public Sub OtroMetodo()MiClase.MiVariable = "Hola
Gente"MiClase.MiMetodo()
End Sub
End Class
![Page 82: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/82.jpg)
http://www.desarrolladoras.com - [email protected]
Clases InstanciadasClases Instanciadas
1. Las clases tal cual las definimos normalmente serán instanciadas mientras NO le agreguemos a algunos de sus miembros el calificativo SHARED (Algunos miembros podrán ser SHARED y a los mismos los podremos invocar a través del nombre de la Clase)
2. Para acceder a sus miembros, Métodos, Propiedades y/o Variables deberemos crear un objeto de esa Clase. Crearemos una nueva instancia.
3. Los Métodos, Propiedades y/o Variables de estas clases pueden ser usados en cualquier parte del código a través de la variable de objeto creada a partir de esta clase.
![Page 83: Una Aplicacion en 3 Capas](https://reader030.fdocument.pub/reader030/viewer/2022012823/5571f2e949795947648d3ed6/html5/thumbnails/83.jpg)
http://www.desarrolladoras.com - [email protected]
Clases InstanciadasClases Instanciadas
Public Class MiClase
Public MiVariable As String
Public Sub MiMetodo()MiVariable = "Hola Mundo"
End Sub
End Class
Public Class OtraClase
Public Sub OtroMetodo() Dim obj As MiClase = New MiClase obj.MiVariable = "Hola Gente" obj.MiMetodo()
End Sub
End Class