Site Web Human Resources ASP.NET (Exemple d'application EDM)
L'application Human Resources ASP.NET est une interface qui peut être utilisée sur un réseau ou Internet pour afficher les données définies et compilée à l'aide de l'exemple Les schémas et DLL référencés par cette application Web sont les mêmes que ceux utilisés par l'application Windows. Le site Web est généré en trois étapes :
Conception de l'interface utilisateur en tant que formulaire sur une page Web avec des contrôles textbox et gridview pour gérer les données d'entrée et d'affichage.
Écriture du code ASP.NET derrière l'interface pour gérer les événements d'entrée et afficher les résultats des recherches sur les paramètres entrés par les utilisateurs.
Configuration des services IIS pour exécuter l'application ASP.NET et se connecter aux données stockées sur le serveur SQL Server utilisé par le modèle de données HRSkills.
Interface utilisateur
L'interface utilisateur est composée de deux zones de texte pour l'entrée de texte qui définit les paramètres de recherche. Les utilisateurs peuvent rechercher des employés par la première lettre du nom ou rechercher des compétences par mots clés. Les résultats des recherches sur ces paramètres sont affichés par les contrôles gridview liés aux requêtes d'objet EDM (Entity Data Model) représentant les employés, les compétences, les informations sur les compétences et les références personnelles.
L'interface utilisateur est illustrée dans la capture d'écran ci-dessous :
La spécification XML suivante définit le formulaire et les contrôles de la page Web qui seront affichés à l'utilisateur. Copiez cette syntaxe dans le fichier Default.aspx de l'application Web ASP.NET dans Visual Studio.
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head >
<title>HR Skills Online</title>
</head>
<body>
<form id="form1" >
<asp:Label ID="Label1" Font-Bold="True"
Text="Filter employees by first letter of last name;
Use * to get all employees: "></asp:Label>
<asp:TextBox ID="TextBox1" MaxLength="1"
ontextchanged="TextBox1_TextChanged" Width="29px"
AutoPostBack="True"></asp:TextBox>
<br />
<asp:Label ID="Label2" Font-Bold="True"
Text="Search for skills on keyword; Use * to get all skills: ">
</asp:Label>
<asp:TextBox ID="TextBox2" MaxLength="50"
Width="271px" AutoPostBack="True"
ontextchanged="TextBox2_TextChanged">
</asp:TextBox>
<asp:GridView
ID="GridView1" BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CellPadding="2"
ForeColor="Black"
onselectedindexchanged="GridView1_SelectedIndexChanged"
Caption="Employees (Click row for skills)" CaptionAlign="Top"
CellSpacing="1">
<footerstyle backcolor="Tan" />
<selectedrowstyle backcolor="DarkSlateBlue"
forecolor="GhostWhite" />
<pagerstyle backcolor="PaleGoldenrod"
forecolor="DarkSlateBlue"
horizontalalign="Center" />
<headerstyle backcolor="Tan" font-bold="True"
font-size="Medium" />
<alternatingrowstyle backcolor="PaleGoldenrod" />
</asp:GridView>
<br />
<asp:GridView
ID="GridView2" BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CellPadding="2"
ForeColor="Black"
onselectedindexchanged="GridView2_SelectedIndexChanged"
Caption="Skills (Click row for details)" CaptionAlign="Top"
CellSpacing="1"
PageSize="5">
<footerstyle backcolor="Tan" />
<selectedrowstyle backcolor="DarkSlateBlue"
forecolor="GhostWhite" />
<pagerstyle backcolor="PaleGoldenrod"
forecolor="DarkSlateBlue" horizontalalign="Center" />
<headerstyle backcolor="Tan" font-bold="True" />
<alternatingrowstyle backcolor="PaleGoldenrod" />
</asp:GridView>
<br />
<asp:GridView ID="GridView3"
BackColor="LightGoldenrodYellow"
BorderColor="Tan" BorderWidth="1px" CaptionAlign="Top"
CellPadding="2"
CellSpacing="1" ForeColor="Black"
onselectedindexchanged="GridView3_SelectedIndexChanged">
<footerstyle backcolor="Tan" forecolor="GhostWhite" />
<pagerstyle backcolor="PaleGoldenrod"
forecolor="DarkSlateBlue"
horizontalalign="Center" />
<headerstyle backcolor="Tan" font-bold="True" />
<alternatingrowstyle backcolor="PaleGoldenrod" />
</asp:GridView>
</form>
</body>
</html>
Code ASP.NET derrière les contrôles Web
Le code C# utilisé pour gérer les événements générés par l'entrée utilisateur est contenu dans le fichier code-behind Default.aspx.cs. Le code suivant est utilisé pour définir des requêtes d'objet et lier les résultats à des contrôles gridview. Pour plus d'informations sur ces opérations, voir Code de l'application HR Skills (Exemple d'application EDM).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HRSkillsModel;
using System.Data.Objects;
namespace HRSkillsOnline
{
public partial class _Default : System.Web.UI.Page
{
protected void GridView1_SelectedIndexChanged(object sender,
EventArgs e)
{
GridView2.SelectedIndex = -1;
GridView3.SelectedIndex = -1;
string connectionStr =
Application.Contents["connectionString"] as string;
using (HRSkillsEntities HRSkills = new HRSkillsEntities())
{
Guid empId = new Guid(
GridView1.SelectedRow.Cells[1].Text);
// Find the Employee.
ObjectParameter param = new ObjectParameter("p", empId);
Employees employee = HRSkills.Employees.Where(
"it.EmployeeId = @p", param).First();
employee.Skills.Load();
GridView2.Caption = "Skills of "
+ employee.FirstName + " " +
employee.LastName;
GridView2.AutoGenerateSelectButton = true;
GridView2.DataSource = employee.Skills;
GridView2.DataBind();
GridView2.Focus();
// Find Employee references.
employee.References.Load();
GridView3.AutoGenerateSelectButton = false;
GridView3.Caption = "References for "
+ employee.FirstName + " " +
employee.LastName;
GridView3.DataSource = employee.References;
GridView3.DataBind();
}
}
protected void GridView2_SelectedIndexChanged(object sender,
EventArgs e)
{
string connectionStr =
Application.Contents["connectionString"] as string;
using (HRSkillsEntities HRSkills = new HRSkillsEntities())
{
// Create a ObjectParameter from the SkillId property
// and get the Skill.
Guid skillId = new Guid(
GridView2.SelectedRow.Cells[1].Text);
ObjectParameter param =
new ObjectParameter("p", skillId);
Skills skill = HRSkills.Skills.Where("it.SkillId = @p",
param).First();
// Load the SkillInfo entities using
// SkillInfo_Skill association.
skill.SkillInfo.Load();
GridView3.AutoGenerateSelectButton = true;
GridView3.DataSource = skill.SkillInfo;
GridView3.DataBind();
GridView3.Caption = "Skills URLs for " +
GridView2.SelectedRow.Cells[2].Text;
GridView3.Focus();
}
}
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
GridView1.SelectedIndex = -1;
GridView2.SelectedIndex = -1;
GridView3.SelectedIndex = -1;
string connectionStr =
Application.Contents["connectionString"] as string;
using (HRSkillsEntities HRSkills = new HRSkillsEntities())
{
if ("*".Equals(TextBox1.Text))
{
GridView1.Caption = "All Employees in System";
GridView1.AutoGenerateSelectButton = true;
GridView1.DataSource =
HRSkills.Employees.Execute(
MergeOption.OverwriteChanges);
GridView1.DataBind();
TextBox1.Text = "";
return;
}
ObjectParameter param =
new ObjectParameter("p", TextBox1.Text.ToUpper());
ObjectQuery<Employees> dbQuery =
HRSkills.Employees.Where(
"SqlServer.SUBSTRING(it.LastName, 1, 1) = @p",
param);
GridView1.Caption = "Employees' last name on: " +
TextBox1.Text.ToUpper();
GridView1.AutoGenerateSelectButton = true;
GridView1.DataSource =
dbQuery.Execute(MergeOption.OverwriteChanges);
GridView1.DataBind();
}
TextBox1.Text = "";
}
protected void TextBox2_TextChanged(object sender, EventArgs e)
{
string connectionStr =
Application.Contents["connectionString"] as string;
using (HRSkillsEntities HRSkills = new HRSkillsEntities())
{
GridView1.SelectedIndex = -1;
GridView2.SelectedIndex = -1;
GridView3.SelectedIndex = -1;
if ("*".Equals(TextBox2.Text))
{
GridView2.Caption = "All Skills in System.";
GridView2.AutoGenerateSelectButton = true;
GridView2.DataSource =
HRSkills.Skills.Execute(
MergeOption.OverwriteChanges );
GridView2.DataBind();
GridView1.DataSource = null;
GridView1.DataBind();
TextBox2.Text = "";
return;
}
// Create ObjectParameter from each keyword
// and search properties of Skills.
ObjectParameter param = new ObjectParameter(
"p", "%" + TextBox2.Text.Trim(
'\"', '&', '%', '$', '#') + "%");
ObjectQuery<Skills> skillsQuery =
HRSkills.Skills.Where(
"it.BriefDescription Like @p " +
"OR it.SkillName Like @p", param);
List<Employees> employeeList = new List<Employees>();
foreach (Skills skill in skillsQuery)
{
skill.EmployeesReference.Load();
employeeList.Add(skill.Employees);
}
GridView1.Caption = "Employees with skills on " +
TextBox2.Text;
GridView1.AutoGenerateSelectButton = true;
GridView1.DataSource = employeeList;
GridView1.DataBind();
GridView2.Caption = "Skills on " +
TextBox2.Text;
GridView2.AutoGenerateSelectButton = true;
GridView2.DataSource =
skillsQuery.Execute(MergeOption.OverwriteChanges);
GridView2.DataBind();
}
TextBox2.Text = "";
}
protected void GridView3_SelectedIndexChanged(object sender,
EventArgs e)
{
string scriptString = @"<script> window.open('" +
GridView3.SelectedRow.Cells[2].Text +
"', left=100)</script>";
if (!ClientScript.IsClientScriptBlockRegistered("PopUpWindow"))
ClientScript.RegisterClientScriptBlock(GridView3.GetType(),
"PopUpWindow", scriptString);
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
}