Una Aplicacion en 3 Capas

83
http://www.desarrolladoras.com - [email protected] Desarrollo de una aplicación Desarrollo de una aplicación en tres capas en tres capas con interfase Cliente con interfase Cliente Windows, Windows, uso de Data Access A. Blocks, uso de Data Access A. Blocks, DataSets tipados DataSets tipados y ... y ...

description

Enfoque teorico de una programacion en N capas en c#Ing. Alberto Moreno

Transcript of Una Aplicacion en 3 Capas

Page 1: Una Aplicacion en 3 Capas

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

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

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

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 5: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

La AplicaciónLa Aplicación

Page 6: Una Aplicacion en 3 Capas

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

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

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

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 10: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Capa Capa dede

DatosDatos

Page 11: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

DataSets tipadosDataSets tipados

La difícil tarea de crear DataSets tipados

en tan solo 4 Pasos...

Page 12: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

1. Agregar un Archivo DataSet.xsd al proyecto

Page 13: Una Aplicacion en 3 Capas

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://www.desarrolladoras.com - [email protected]

Data AccessData AccessApplication BlocksApplication Blocks

Page 29: Una Aplicacion en 3 Capas

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

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

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

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

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

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

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 36: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

PausaPausa

MateMateBreakBreak

Page 37: Una Aplicacion en 3 Capas

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

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 39: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Capa Capa NegocioNegocio

Page 40: Una Aplicacion en 3 Capas

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 55: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Capa Capa ClienteCliente

Page 56: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Herencia Herencia de de

FormulariosFormularios

Page 57: Una Aplicacion en 3 Capas

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

http://www.desarrolladoras.com - [email protected]

Page 78: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Muchas Gracias

desarrolladoras

www.desarrolladoras.com

Page 79: Una Aplicacion en 3 Capas

http://www.desarrolladoras.com - [email protected]

Clases Instanciadas Clases Instanciadas versus versus

Clases CompartidasClases Compartidas

Page 80: Una Aplicacion en 3 Capas

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

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

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

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