Descargar tema en pdf - Servicio de Informática

Anuncio
Gestión de una aplicación completa con .NET
Servicio de Informática
TEMA 2: FORMULARIOS
1.
CONTROLES ESTÁNDAR DE FORMULARIOS
(Viene del tema
http://www.ua.es/es/servicios/si/documentacion/net_c/intro_master_pages.html)
La forma más fácil para insertar controles es desde design o diseño.
Para añadir controles al formulario utilizaremos la
barra de herramientas. Por ejemplo, para añadir una
etiqueta (Label) y una caja de texto (TextBox),
simplemente haremos doble-clic sobre esos
elementos de la barra de herramientas y se añadirán
al formulario o podemos también agarrarlos y
arrastrarlos hasta nuestro formulario.
Por defecto, el IDE pone un texto genérico (Label,
Button, etc) y un nombre al control tal como label1,
textbox1, button1, es decir utiliza el tipo de control y lo
va numerando tantas veces como controles iguales
tengamos en el formulario(label1, label2, label3,...).
Es por ponerle un nombre inicial, ya que siempre los
controles deben tener un nombre único.
Para cambiar el texto y el nombre que contiene el
botón "Button" hay que utilizar la ventana de
propiedades. Fíjate que en la parte superior de la
ventana pone el control que estamos editando y de
qué tipo es.
Tema 2 / Página 1
Gestión de una aplicación completa con .NET
Servicio de Informática
2. PANTALLA NUEVO USUARIO
Vamos a crear esta pantalla de captura de datos. Para ello analizamos los controles
que nos hacen falta.
LABEL VS LITERAL:
1 El control Literal hace un render, el html tal cual y como es, es decir:
<p><asp:Literal ID="LiteralNuevoUsuario" runat="server" Text="Nuevo Usuario" /></p>
Tema 2 / Página 2
Gestión de una aplicación completa con .NET
Servicio de Informática
Quedará en el navegador:
<p> Nuevo Usuario</p>
En cambio al usar el control Label:
<p><asp:Label ID="LabelNuevoUsuario " runat="server" Text="Nuevo Usuario" /></p>
Quedará en el navegador:
<p><span id="LabelNuevoUsuario "> Nuevo Usuario</span></p>
2 El control Label tiene más propiedades que podemos explotar, también podemos
aplicar estilos.
Un escenario para usar un control Literal, sería usarlo dentro del head del html, y
dentro de title, para hacer que este sea dinámico.
Como este texto es un título debemos hacerlo destacar: para ello recurrimos a una
hoja de estilos css.
Primero eliminamos el literal.
Creamos un nuevo ítem desde el explorador de soluciones:
Escribimos en formulario.css
body
{
font: normal 0.8em/1.2em "Arial", "Trebuchet Ms", sans-serif;
}
.Titulo
{
font-size: 1.4em;
color: #AAAAAA;
Tema 2 / Página 3
Gestión de una aplicación completa con .NET
Servicio de Informática
display: block;
float: left;
clear: both;
padding: 0em 0.2em 1.2em 0em;
}
Y por último asociamos nuestro Label título a la clase titulo (cssClass).
PANEL:
Se trata de un DIV que englobará el resto de los botones.
Como queremos que se vea necesitaremos ponerle un
borde. Desde propiedades podemos modificar los valores
del div. Esto implicará rederizar un control div con un
atributo style… ummm ¡mejor un control css!
Seguimos copiando en formulario.css
#PanelDatosPersonales
{
clear: both;
border-color:Red;
border-width:1px;
border-style:Solid;
padding: 5px;
}
Como querremos pasar este formulario dentro de una content page (ver tema
siguiente) estamos incurriendo en un error. No debemos definir estilos sobre
identificadores, sino sobre clases. Al pasarlo a content page, .NET nos modificará el
identificador a algo como ctl00_Contenido_PanelDatosPersonales.
Así que, mejor:
.PanelDatosPersonales
{
clear: both;
border-color:Red;
border-width:1px;
border-style:Solid;
padding: 5px;
}
Tema 2 / Página 4
Gestión de una aplicación completa con .NET
Servicio de Informática
Un panel se puede asociar a un botón
en
propiedades. Con esto conseguimos que al dar a “enter” dentro del panel se dispare el
“onclick” del botón asociado… sin duda muy útil.
LABEL’S ASOCIADOS Y TEXTBOX’S:
Es posible asociar un label a otro control. Al renderizar los controles en lugar de
aparecer span aparecerá label.
Se deja como ejercicio el css asociado a los Label asociados y a los textBox de
manera que quede como en la figura.
LISTA DESPLEGABLE ESCRITA A MANO:
Esta propiedad de algunos controles (como listas deplegables o DropDownList)
permite escribir “a mano” el contenido de la lista.
¿Cómo hacerlo por programación, como paso previo a hacerlo a través de base de
datos?
Para ello creamos una lista de strings:
List<string> ciudades = new List<string>{"Alicante", "Elche"};
Podemos borrar los ítems que ya existen:
DropDronwnListLocalizacion.Items.Clear();
Y añadimos los nuevos ítems:
foreach (string ciudad in ciudades)
{
DropDronwnListLocalizacion.Items.Add(ciudad);
}
Si queremos asignar un valor:
int i = 1;
foreach (string ciudad in ciudades)
{
DropDronwnListLocalizacion.Items.Add(
new ListItem(ciudad, i.ToString()
);
i++;
}
Tema 2 / Página 5
Gestión de una aplicación completa con .NET
Servicio de Informática
Y ¿Dónde ponemos el código? Este tema se tratará más adelante, pero por ponerlo de
forma correcta lo pondremos en:
protected void DropDronwnListLocalizacion_Load
(object sender, EventArgs e)
{
int i = 1;
foreach (string ciudad in ciudades)
{
DropDronwnListLocalizacion.Items.Add(
new ListItem(ciudad, i.ToString()
);
i++;
}
}
MULTIVIEW & VIEW:
Al pinchar sobre el botón volver deben ocurrir varias cosas:
1.- Validar los datos. Esto se realizará según las indicaciones del punto siguiente.
2.- Ir al formulario principal, que será un datagrid donde se muestra el DNI, Nombre,
Apellidos, Localización, Correo Electrónico.
La aplicación está montada sobre 2 formularios, con lo que la vamos a montar sobre la
misma página aspx, y haremos postback sobre sí misma.
El control perfecto para el punto 2 es Multiview.
Multiview es un control que agrupa otro tipo de controles: View.
Y un View es una especie de panel y como tal agrupa otros controles.
Tema 2 / Página 6
Gestión de una aplicación completa con .NET
Servicio de Informática
BOTONES:
¿Qué propiedades destacamos de un botón?
UseSubmitBehavior. Si es true se comporta
como un botón submit de un form.
PostBackUrl. Indica a que página se debe ir
tras hacer el submit. Si no se indica se llama
a la misma página en la que está el botón.
Tooltip. Mensaje que aparece en un cuadrito
amarillo en algunos navegadores al poner el
ratón encima.
CausesValidation. Si el botón va a validar
los controles o no. Para poder validar los
controles estos tienen que tener asociados un
control de validación (ver punto siguiente).
OnClientClick. Para asociar funciones
javascript. El javascript debe ir en un fichero
independiente .js.
Tema 2 / Página 7
Gestión de una aplicación completa con .NET
Servicio de Informática
3. PANTALLA PRESENTACIÓN DE DATOS (PRINCIPAL)
GRIDVIEW desde una collection.
Muestra los valores de un origen de datos en una tabla donde cada columna
representa un campo y cada fila representa un registro. El control GridView permite
seleccionar, ordenar y modificar estos elementos.
El origen puede ser:
Por no entrar todavía en el tema de bases de datos (ver tema de base de datos)
vamos a elegir la opción de objeto.
La idea es crear un GridView cuyos datos saldrán de forma dinámica desde
programación.
Lo primero que necesitamos es un objeto. Creamos un nuevo ítem
Y elegimos “Clase”. Visual Studio nos sugiere colocar la clase en la carpeta especial
“App_Code”. Debemos aceptar. A la clase la llamamos “animales.cs”. Nuestra clase
simplemente tendrá 2 propiedades públicas:
/// <summary>
/// Descripción breve de animales
/// </summary>
public class Animales
{
public int IDAnimal {set; get; }
public string Nombre { set; get; }
}
Creamos un nuevo ítem “Web Form”.
Insertamos un control desde diseño un GridView.
Tema 2 / Página 8
Gestión de una aplicación completa con .NET
Servicio de Informática
Algunas propiedades se pueden modificar desde el asistente, otras no. Pero desde
programación siempre podremos alterar esas propiedades.
La primera propiedad a modificar será el identificador:
Desde el asistente le damos el formato (auto format) que nos guste:
Desde el asistente añadimos una nueva columna para editar los registros (Add New
Column). Debe ser uno del tipo comando.
Tema 2 / Página 9
Gestión de una aplicación completa con .NET
Servicio de Informática
¿Qué nos falta? Pues la propiedad más importante, la del origen de datos. Para ello
vamos a crear por programación una lista de objetos.
public List<Animales> Animales = new List<Animales>{
new Animales {IDAnimal=1, Nombre="Elefante"},
new Animales {IDAnimal=2, Nombre="Ballena"},
new Animales {IDAnimal=3, Nombre="Caballo"},
new Animales {IDAnimal=4, Nombre="Cerdo"},
new Animales {IDAnimal=5, Nombre="Lobo"}
};
Y asignamos de forma dinámica el origen de datos:
GridViewAnimales.DataSource = Animales;
Si tuviéramos que elegir un origen de datos basado en una base de datos, tendríamos
que crear un control de SqlDataSource, darle un nombre y asignarlo a la propiedad
GridViewAnimales.DataSourceID = Nombre_SqlDataSource;
Y la instrucción para que pinte las columnas (muy importante si queremos ver algo):
GridViewAnimales.DataBind();
El resultado algo como:
Si en lugar del texto “Editar” quisiéramos otro texto o incluso otra imagen deberíamos
modificar las propiedades del CommandField. Si queremos que aparezca una imagen
las propiedades a tocar son:
HeaderText="Editar"
EditImageUrl="~/imagenes/editar.jpg"
ShowEditButton="True"
EditText= "--Edita--"
ButtonType="Image"
ShowHeader="True"
ButtonType determina que se ve, si la imagen que hemos definido o si lo ponemos en
Link el texto que hemos escrito (--Edita--).
[Añadir columnas]
Revisemos que están todas las columnas y que no hay ninguna que no tengamos que
mostrar o si se muestra de forma diferente. Para arreglar esto tendremos que añadir
las columnas que nos interesen:
Tema 2 / Página 10
Gestión de una aplicación completa con .NET
Servicio de Informática
Cada columna será un BoundField.
Pero con la opción de editar columnas “Edit Columns” accedemos a más opciones.
Puede ocurrir que nos interese pasar un “BoundField” a “TemplateField” para tener
más control sobre lo que nos muestra. Una vez pasado a “TemplateField” tendremos
que recurrir a programación para hilar tan fino como queramos.
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("Animales")
%>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"
Text='<%# Bind("Animales") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
Tema 2 / Página 11
Gestión de una aplicación completa con .NET
Servicio de Informática
¿Qué falta? Los eventos. Si pinchas sobre editar el ASPX no sabrá que tiene que
hacer y dará un error.
Veamos algunos eventos: En el GridView
• Ponemos la propiedad de PageSize de 10 (por defecto) a 3. Y permitimos
paginación PageSize="3" AllowPaging="True"
• Ponemos la propiedad AllowSorting="True"
Ahora debemos diseñar los eventos.
EVENTOS
NAVEGACIÓN ENTRE PÁGINAS
Hacemos doble clic sobre la zona marcada por el círculo. Si el rayo (marcado por el
cuadrado) no se viera, tendríamos que ir al modo de diseño.
Tema 2 / Página 12
Gestión de una aplicación completa con .NET
Servicio de Informática
protected void GridViewAnimales_PageIndexChanging(object sender,
GridViewPageEventArgs e)
{
GridViewAnimales.PageIndex = e.NewPageIndex;
GridViewAnimales.DataBind();
}
EDITAR
Si al marcar editar debemos ir a otra página y arrastrar el id seleccionado:
protected void GridViewAnimales_RowEditing1(object sender,
GridViewEditEventArgs e)
{
Response.Redirect("otrapagina.aspx?id=" +
GridViewAnimales.Rows[e.NewEditIndex].Cells[1].Text);
}
ORDENAR
NOTA: Este método tumba el servidor IIS temporal que levanta el .NET al hacer
control + F5.
protected void GridViewAnimales_Sorting(object sender,
GridViewSortEventArgs e)
{
GridViewAnimales.Sort(e.SortExpression, e.SortDirection);
GridViewAnimales.DataBind();
}
Tema 2 / Página 13
Gestión de una aplicación completa con .NET
Servicio de Informática
4. VALIDACIÓN: TIPOS DE CONTROLES
(Viene del tema http://www.ua.es/es/servicios/si/documentacion/net_c/validacion.html)
El Framework de Formularios Web incluye un conjunto de controles de servidor de
validación que proporcionan una forma sencilla pero poderosa de comprobar los
formularios de entrada en busca de errores y, si es necesario, mostrar mensajes al
usuario.
Podemos "ligar" más de un control de
validación a un control de entrada. Por
ejemplo, podríamos especificar tanto que
un campo es obligatorio y que debe
contener un rango específico de valores.
Nombre del Control
Descripción
RequiredFieldValidator
Asegura que el usuario no se deja un campo
CompareValidator
Compara los datos que introduce el usuario con una
constante o el valor de una propiedad de otro control
mediante un operador de comparación (menor que,
igual que, mayor que, etc.).
RangeValidator
Comprueba que la entrada del usuario se encuentra
entre un límite superior y otro inferior. Podemos
comprobar los rangos con parejas de números,
caracteres alfabéticos o fechas. Los límites se pueden
expresar como constantes.
RegularExpressionValidator
Comprueba que la entrada sigue un patrón definido
como una expresión regular. Este tipo de validación
nos permite comprobar secuencias predecibles de
caracteres, tales como números de seguridad social,
dirección de e-amil, números de teléfono, códigos
postales, etc.
CustomValidator
Comprueba la entrada de usuario mediante lógica de
validación que hemos programado nosotros. Este tipo
de validación nos permite comprobar valores obtenidos
en tiempo de validación.
ValidationSummary
Muestra los errores de validación en un formulario
resumen para todos los validadores de la página.
Tema 2 / Página 14
Gestión de una aplicación completa con .NET
Servicio de Informática
5. ENLACES DE INTERNET
Más información sobre este tema:
http://msdn.microsoft.com/es-es/library/4w7ya1ts.aspx#introduction
Introducción a los controles:
http://www.ua.es/es/servicios/si/documentacion/net_c/intro_master_pages.html
Introducción a la validación:
http://www.ua.es/es/servicios/si/documentacion/net_c/validacion.html
Expresiones regulares:
http://regexlib.com/
6. EJERCICIO 02.
Partimos de la estructura de clases que ya se generó en el ejercicio 01.
Se proporcionan las clases ya programadas y la imagen de “Editar”:
ClaseLocalización.cs
ClaseLocalizaciones.cs
ClaseUsuario.cs
ClaseUsuarios.cs
Edicion.jpg
ClaseLocalizaciones tiene la siguiente lista de localizaciones:
public static List<ClaseLocalizacion> Todas()
{
List<ClaseLocalizacion> poolLocalizaciones =
new List<ClaseLocalizacion>()
{
new ClaseLocalizacion{
Codigo=1,Descripcion="Servicio Informatica"},
new ClaseLocalizacion{Codigo=2,Descripcion="SYBID"},
new ClaseLocalizacion{Codigo=3,Descripcion="FRAGUA"}
};
return (poolLocalizaciones);
Tema 2 / Página 15
Gestión de una aplicación completa con .NET
Servicio de Informática
}
ClaseUsuarios tiene la siguiente lista de usuarios:
private static List<ClaseUsuario> Todos()
{
ClaseLocalizacion LocalizacionSI = new ClaseLocalizacion();
LocalizacionSI.Carga(1);
ClaseLocalizacion LocalizacionFRAGUA = new ClaseLocalizacion();
LocalizacionFRAGUA.Carga(2);
ClaseLocalizacion LocalizacionSIGUA = new ClaseLocalizacion();
LocalizacionSIGUA.Carga(3);
List<ClaseUsuario> Usuarios = new List<ClaseUsuario>()
{
new ClaseUsuario(){
Codigo=1, Clave="", Nombre = "Susana", Apellidos = "Tilla
Frita", Dni="22222222B", Localizacion= LocalizacionSI,
CorreoElectronico="susana@ua.es"},
new ClaseUsuario(){
Codigo=2, Clave="", Nombre = "Moncho", Apellidos = "Rizo Asado",
Dni="33333333C", Localizacion=LocalizacionSI,
CorreoElectronico="moncho@ua.es"},
new ClaseUsuario(){
Codigo=3, Clave="", Nombre = "Rosa", Apellidos = "Pincha Mucho",
Dni="44444444D", Localizacion=LocalizacionSIGUA,
CorreoElectronico="rosa@ua.es"},
new ClaseUsuario(){
Codigo=4, Clave="", Nombre = "Silvio", Apellidos = "Rodri
Fernandez", Dni="55555555E", Localizacion=LocalizacionFRAGUA,
CorreoElectronico="silvio@ua.es"}
};
return Usuarios;
}
Se pide:
Un único ASPX con un VIEWGROUP con dos VIEW’s:
View 1
Tema 2 / Página 16
Gestión de una aplicación completa con .NET
Servicio de Informática
1.- Al pinchar sobre salir: Va a la página principal de la UA. Pero se debe ir sin hacer
post, hay que usar Response.Redirect
2.- La lista desplegable de “Filtrar por localización” se rellena desde la clase
“ClaseLocalizaciones”. De momento no hace nada cuando seleccionamos
(reservamos para tema base de datos).
3.- Comprobar que salen exactamente estas columnas (por ejemplo Clave no está).
4.- El GridView se ha paginado a 3 registros. Al pinchar sobre el 2 podremos ver el
registro 4.
5.- Al pichar sobre “Editar” o sobre “Nuevo” iremos al formulario de recogida de datos
que estará sobre el View2. La diferencia es que “Editar” rellenará automáticamente los
datos del usuario.
View 2 NUEVO (Si pinchamos sobre nuevo)
Tema 2 / Página 17
Gestión de una aplicación completa con .NET
Servicio de Informática
1.- Al pichar sobre “Volver” o sobre “Guardar” se vuelve al View 1. De momento no hay
distinción entre un botón y el otro. Pero se comprueba la validación del formulario sólo
en guardar. Se reserva para el tema de base de datos.
2.- Al pinchar sobre “Generar” generará una clave aleatoria de 10 caracteres (incluye
letras y números exclusivamente).
3.- Los campos Nombre, Apellidos, DNI, clave y localización son obligatorios.
4.- En caso de rellenar el correo electrónico se comprueba que el texto introducido se
parezca a un correo electrónico.
View 2 EDITAR (Si pinchamos sobre editar del GridView)
Se rellena con los datos del usuario seleccionado. La validación es la misma que con
la de nuevo. El título del formulario ha cambiado: “Editando a <Apellidos>”.
Aparece un botón que ofrece la posibilidad de borrar el registro actual (de momento
este botón no hará nada).
Tema 2 / Página 18
Descargar