DiaryWeb

Anuncio
Libre Configuración Curricular.
1/7
Programación Orientada a Objetos con Herramientas Visuales
DiaryWeb
Interfaz gráfico.....................................................................................................................................................1
El control Calendar ..............................................................................................................................................2
El control Datagrid ...............................................................................................................................................2
Lógica de negocio ...............................................................................................................................................5
Interfaz gráfico
Esta aplicación web consta de dos páginas aspx, una para hacer el login y otra para gestionar las citas del
usuario conectado. El aspecto de estas páginas es el siguiente:
Pantalla de login
Libre Configuración Curricular.
2/7
Programación Orientada a Objetos con Herramientas Visuales
Pantalla de gestión de citas
El control Calendar
Este control web permite gestionar fechas a través de un interfaz gráfico amigable y configurable. Para obtener
la fecha seleccionada dispone de la propiedad SelectedDate, para saber cuándo se cambia la fecha haciendo
clic en el calendario se tiene el evento _SelectionChanged.
El control Datagrid
Este control implementa una rejilla de datos web. Su comportamiento es parecido al de las rejillas de datos de
las aplicaciones Windows pero con las limitaciones propias de las aplicaciones web. Por ejemplo, este control
sólo actualiza los contenido bajo demanda (operación DataBind()), al contrario que el mismo control para
aplicaciones Windows que actualiza su contenido de forma automática.
Este control se enlaza a una base de datos a través de sus propiedades DataSource y DataMember. El primero
es el conjunto de datos (DataSet) con el que se enlaza, y el segundo, es la tabla (vista o comando) del conjunto
de datos que se visualiza. A estas propiedades se les suele dar valor en tiempo de diseño, pero el compilador no
las chequea, por lo que un error sintáctico en el nombre del conjunto de datos, de la tabla o de las columnas
provoca una excepción en tiempo de ejecución.
Libre Configuración Curricular.
3/7
Programación Orientada a Objetos con Herramientas Visuales
Su aspecto y sus columnas son configurable a través de una página de propiedades. En cuanto a las columnas
existen distintos tipos:
•
Las columnas enlazadas con datos
•
Las columnas con hiperenlaces
•
Las columnas con comandos (editar, actualizar, …)
Para saber cuándo se pulsa sobre una columna de comando se tiene el evento _ItemCommand, por ejemplo
para programa el comando de borrado de una cita se tiene:
private void notesDtg_ItemCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
notesDtg_CancelCommand(null,null);
if (e.CommandName == "Delete")
{
string date = e.Item.Cells[1].Text;
notes.RemoveNote(loginName, createDateTime(date));
notesDtg.DataBind();
}
}
Para los comandos de “Editar”, “Cancelar” y “Actualizar” se tienen los eventos específicos de _EditCommand,
_CancelCommand y _UpdateCommand:
Private void notesDtg_EditCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
notesDtg.EditItemIndex = e.Item.ItemIndex;
notesDtg.DataBind();
}
private void notesDtg_CancelCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
notesDtg.EditItemIndex = -1;
notesDtg.DataBind();
}
private void notesDtg_UpdateCommand(object source,
System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
TextBox tb;
string hour, text;
localhost.notesDts.NotesRow r;
hour = e.Item.Cells[1].Text;
tb = (TextBox) e.Item.FindControl("textoTxt");
text = tb.Text;
DateTime t = createDateTime(hour);
r = notes.FindByLoginDate(loginName,t);
r.Text = text;
notesDtg.EditItemIndex = -1;
notesDtg.DataBind();
}
Libre Configuración Curricular.
4/7
Programación Orientada a Objetos con Herramientas Visuales
La forma de añadir una nueva fila en este control es añadiendo la fila en su conjunto de datos y refrescando el
contenido del mismo. Esta nueva fila tendrá unos valores por defecto que podrán ser modificados a través de un
comando de “Edición”:
private void añadirBtn_Click(object sender, System.EventArgs e)
{
if (this.IsValid && notesDtg.EditItemIndex == -1)
{
//Si la validación de la página es correcta y el datagrid no se está
editando
Try
{
notes.AddNewNote(
createDateTime(horasDdl.SelectedItem.Text),
loginName,
loginName + ", escriba aqui la cita");
warningLbl.Visible = false;
}
catch(ConstraintException oops)
{
//Page.RegisterStartupScript("alert","<script
language='javascript'>alert(\"Ya exista una cita a esa hora\")</script>");
warningLbl.Visible=true;
}
finally
{
notesDtg.DataBind();
}
}
}
Libre Configuración Curricular.
5/7
Programación Orientada a Objetos con Herramientas Visuales
Lógica de negocio
El diagrama de clases de esta aplicación web es el siguiente:
System.Web.UI.Page
#Session
Notes
#dataSet
#webService
#count
+update()
+addNew()
+remove()
DiaryPage
#ws
#notes
#name
#loginName
<<aspx>>
Default
<<aspx>>
LogIn
Capa de interfaz
Capa de negocio
(acceso a datos)
La clase DiaryPage especializa a una página aspx.net por lo que podrá tener acceso a todas las variables de
sesión. Por ejemplo, para guardar el nombre del usuario que se conecta a la agenda se tiene:
protected string loginName
{
set
{
Session["loginName"] = value;
}
get
{
return (string)Session["loginName"];
}
}
La clase Notes es un envoltorio del servicio web que accede a la base de datos de la agenda. Para ello dispone
de dos propiedades, dataSet y webService:
public localhost.notesDts DataSet
{
set
{
Libre Configuración Curricular.
6/7
Programación Orientada a Objetos con Herramientas Visuales
_dts = value;
}
get
{
return _dts;
}
}
public localhost.DiaryService WebService
{
set
{
_ws = value;
}
get
{
return _ws;
}
}
En esta clase se implementarán las operaciones para añadir, actualizar y elinar una cita de la agenda. El código
de estas operaciones es el siguiente:
public void update()
{
if (_dts.HasChanges())
_ws.changeNotes(_dts);
}
public void addNew(
DateTime date, string login, string text)
{
localhost.notesDts.NotesRow row;
row = _dts.Notes.NewNotesRow();
row.BeginEdit();
row.Date = date;
row.Text = text;
row.Login = login;
row.EndEdit();
_dts.Notes.AddNotesRow(row);
}
public void remove (string login, DateTime date)
{
localhost.notesDts.NotesRow r;
r = _dts.Notes.FindByLoginDate(login,date);
if ( r != null)
r.Delete();
}
Libre Configuración Curricular.
7/7
Programación Orientada a Objetos con Herramientas Visuales
De esta forma, las páginas LogIn.aspx y Default.aspx sólo contendrán código para gestionar los eventos de sus
formularos. Por ejemplo, para que cuando se pulse en el botón de LogIn se autentifique al usuario y se le
redireccione a la página de citas se tiene:
private void loginBtn_Click(object sender, System.EventArgs e)
{
if (ws.authenticate(usuarioTxt.Text, passwordTxt.Value))
{
loginName = usuarioTxt.Text;
name = ws.getUsers().Users.FindBylogin(loginName).name;
redirect("./Default.aspx");
}
}
Donde redirect es una operación que podemos implementar en la clase (página) padre de la siguiente forma:
protected void redirect(string page, string frame)
{
Response.Write("<script>window.open(\"" + page + "\", \"" + frame +
"\");</script>");
}
protected void redirect(string page)
{
Response.Redirect(page);
}
Descargar