Опубликован: 29.08.2012 | Уровень: специалист | Доступ: платный
Практическая работа 10:

Работа с базами данных с использованием MSASP.NETRazor

< Лекция 6 || Практическая работа 10: 12 || Практическая работа 11 >

Отображать табличные данные можно более наглядным способом:

WebGridOfCharacters.cshtml

@{
vardb = Database.Open("Dream");
varselectQueryString = "SELECT CHARACTER_NAME, CHARACTER_DESCRIPTION, 
FAMILY_STATUS FROM CHARACTER_TBL ORDER BY CHARACTER_NAME";
var data = db.Query(selectQueryString);
var grid = newWebGrid(data, defaultSort: "CHARACTER_NAME", rowsPerPage: 4);
}
<!DOCTYPEhtml>
<html>
<head>
<title>Список героев романа Роберта Льюиса Стивенсона "Остров Сокровищ"</title>
<styletype="text/css">
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
.grid { margin: 4px; border-collapse: collapse; width: 600px; }
.head { background-color: #E8E8E8; font-weight: bold; font-family: Verdana; color: #0094ff;font-size: 16px;}
.gridth, .gridtd { border: 1pxsolid#C0C0C0; padding: 5px; font-family: Verdana; color: #0094ff;font-size: 14px;}
.alt { background-color: #E8E8E8; color: #000; }
.character { width: 200px; }
</style>
</head>
<body>
<h1>Список героев романа Роберта Льюиса Стивенсона "Остров Сокровищ"</h1>
@grid.GetHtml(
tableStyle: "grid",
headerStyle: "head",
alternatingRowStyle: "alt",
columns: grid.Columns(
grid.Column("CHARACTER_NAME", "Персонаж", style: "character"),
grid.Column("CHARACTER_DESCRIPTION", "Характер", format:@<i>@item.CHARACTER_DESCRIPTION</i>),
grid.Column("FAMILY_STATUS", "Семейное положение", format:@<text>@item.FAMILY_STATUS</text>)
)
)
</html>
    

Такой способ представления данных позволяет, в частности сортировать данные таблицы по столбцам и организовывать многостраничный просмотр.

Добавлять данные в таблицу можно с помощью веб-странички InsertOfCharacters.cshtml:

@{
vardb = Database.Open("Dream");
var CHARACTER_NAME = Request["CHARACTER_NAME"];
var CHARACTER_DESCRIPTION = Request["CHARACTER_DESCRIPTION"];
var FAMILY_STATUS = Request["FAMILY_STATUS"];
if (IsPost) {
// Считывание имени персонажа.
CHARACTER_NAME = Request["CHARACTER_NAME"];
if (CHARACTER_NAME.IsEmpty())
    {
ModelState.AddError("CHARACTER_NAME", "Введитеимяперсонажа");
}
// Считываниеописанияпродукта.
    CHARACTER_DESCRIPTION = Request["CHARACTER_DESCRIPTION"];
if (CHARACTER_DESCRIPTION.IsEmpty())
    {
ModelState.AddError("CHARACTER_DESCRIPTION",
"Введите характер персонажа");
}  
// Считывание семейного положения персонажа
FAMILY_STATUS = Request["FAMILY_STATUS"];
if (FAMILY_STATUS.IsEmpty())
    {
ModelState.AddError("FAMILY_STATUS", "Укажитесемейноеположениеперсонажа");
}     
// Определение запроса вставки. Значения, присваемые
// столбцам в таблице CHARACTER_TBL определяются как параметры
// (используя ключевое слово VALUES).
if (ModelState.IsValid) {
varinsertQuery = "INSERT INTO CHARACTER_TBL (CHARACTER_NAME, CHARACTER_DESCRIPTION, 
FAMILY_STATUS) " + "VALUES (@0, @1, @2)";
db.Execute(insertQuery, CHARACTER_NAME, CHARACTER_DESCRIPTION, FAMILY_STATUS);
// Отображение страницы со списком продуктов.
Response.Redirect(@Href("~/ListOfCharacters"));
}
}
}
<!DOCTYPEhtml>
<html>
<head>
<title>Добавление продуктов</title>
<styletype="text/css">
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
label { float: left; width: 8em; text-align: right;margin-right: 0.5em; 
font-family: Verdana; color: #0094ff;font-size: 14px;}
fieldset { padding: 1em; border: 1pxsolid; width: 35em;}
legend { padding: 2px4p; border: 1pxsolid; font-weight: bold;font-family: Verdana; color: #0094ff;font-size: 14px;}
.errorDisplay { font-weight:bold; color:red; font-size:11pt; }
</style>
</head>
<body>
<h1>Добавление нового персонажа</h1>
<divclass=".errorDisplay">
@Html.ValidationSummary("Ошибки в добавляемом:")
</div>
<formmethod="post"action="">
<fieldset>
<legend>Персонаж</legend>
<div>
<label>Имя:</label>
<inputname="CHARACTER_NAME"type="text"size="50"
value="@CHARACTER_NAME"/>
</div>
<div>
<label>Характер:</label>
<inputname="CHARACTER_DESCRIPTION"type="text"size="50"
value="@CHARACTER_DESCRIPTION"/>
</div>
<div>
<label>Семейное положение:</label>
<inputname="FAMILY_STATUS"type="text"size="50"
value="@FAMILY_STATUS"/>
</div>
<div>
<label>&nbsp;</label>
<inputtype="submit"value="Вставить"class="submit"/>
</div>
</fieldset>
</form>
</body>
</html>
    

Редактировать данные можно с помощью двух веб-страниц: EditCharacters.cshtml и UpdateCharacters.cshtml:

EditCharacters.cshtml

@{
vardb = Database.Open("Dream");
varselectQueryString = "SELECT CHARACTER_ID, CHARACTER_NAME, CHARACTER_DESCRIPTION, 
FAMILY_STATUS FROM CHARACTER_TBL ORDER BY CHARACTER_NAME";
}
<!DOCTYPEhtml>
<html>
<head>
<title>Изменение персонажей</title>
<styletype="text/css">
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
td {font-family: Verdana; color: #0094ff;font-size: 14px;}
th {font-family: Verdana; color: #0094ff;font-size: 16px;}
table, th, td {border: solid2px#0094ff;border-collapse:collapse;padding:2px;}
</style>
</head>
<body>
<h1>Изменение персонажей</h1>
<table>
<thead>
<tr>
<th>&nbsp;</th>
<th>Персонаж</th>
<th>Характер</th>
<th>Семейное положение</th>
</tr>
</thead>
<tbody>
@foreach (var row indb.Query(selectQueryString)) {
<tr>
<td><ahref="@Href("~/UpdateCharacters", row.CHARACTER_ID)">Правка</a></td>
<td>@row.CHARACTER_NAME</td>
<td>@row.CHARACTER_DESCRIPTION</td>
<td>@row.FAMILY_STATUS</td>
</tr>
         }
</tbody>
</table>
</body>
</html>
    

UpdateCharacters.cshtml

@{
vardb = Database.Open("Dream");
varselectQueryString = "SELECT * FROM CHARACTER_TBL WHERE CHARACTER_ID=@0";
var CHARACTER_ID = UrlData[0];
if (CHARACTER_ID.IsEmpty())
{
Response.Redirect(@Href("~/EditCharacters"));
}
var row = db.QuerySingle(selectQueryString, CHARACTER_ID);
var CHARACTER_NAME = row.CHARACTER_NAME;
var CHARACTER_DESCRIPTION = row.CHARACTER_DESCRIPTION;
var FAMILY_STATUS = row.FAMILY_STATUS;
if (IsPost) {
CHARACTER_NAME = Request["CHARACTER_NAME"];
if (String.IsNullOrEmpty(CHARACTER_NAME)) {
ModelState.AddError("CHARACTER_NAME", "Персонаж");
}
CHARACTER_DESCRIPTION = Request["CHARACTER_DESCRIPTION"];
if (String.IsNullOrEmpty(CHARACTER_DESCRIPTION)) {
ModelState.AddError("CHARACTER_DESCRIPTION","Характер");
}        
FAMILY_STATUS = Request["FAMILY_STATUS"];
if (String.IsNullOrEmpty(FAMILY_STATUS)) {
ModelState.AddError("FAMILY_STATUS", "Семейное положение");
}
if (ModelState.IsValid) {
varupdateQueryString =
"UPDATE CHARACTER_TBL SET CHARACTER_NAME=@0, CHARACTER_DESCRIPTION=@1, 
FAMILY_STATUS=@2 WHERE CHARACTER_ID=@3";
db.Execute(updateQueryString, CHARACTER_NAME, CHARACTER_DESCRIPTION, FAMILY_STATUS, CHARACTER_ID);
Response.Redirect(@Href("~/EditCharacters"));
}
}
}
<!DOCTYPE>
<html>
<head>
<title>Обновление персонажей</title>
<styletype="text/css">
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
label { float: left; width: 8em; text-align: right;margin-right: 0.5em; font-family: Verdana; color: #0094ff;font-size: 14px;}
fieldset { padding: 1em; border: 1pxsolid; width: 35em;}
legend { padding: 2px4p; border: 1pxsolid; font-weight: bold;font-family: Verdana; color: #0094ff;font-size: 14px;}
.errorDisplay { font-weight:bold; color:red; }
</style>
</head>
<body>
<h1>Обновление персонажа</h1>
<divclass="errorDispla">
@Html.ValidationSummary("Ошибки в добавляемом:")
</div>
<formmethod="post"action="">
<fieldset>
<legend>Обновлениеперсонажа</legend>
<div>
<label>Персонаж:</label>
<inputname="CHARACTER_NAME"type="text"size="50"
value="@CHARACTER_NAME"/>
</div>
<div>
<label>Характер:</label>
<inputname="CHARACTER_DESCRIPTION"type="text"size="50"
value="@CHARACTER_DESCRIPTION"/>
</div>
<div>
<label>Семейное положение:</label>
<inputname="FAMILY_STATUS"type="text"size="50"
value="@FAMILY_STATUS"/>
</div>
<div>
<label>&nbsp;</label>
<inputtype="submit"value="Обновить"class="submit"/>
</div>
</fieldset>
</form>
</body>
</html>
    
Листинг 1.

Для удаления записей из таблиц используются файлы: ListOfCharactesForDelete.cshtml и DeleteCharacter.cshtml.

ListOfCharactesForDelete.cshtml

@{
vardb = Database.Open("Dream");
varselectQueryString = "SELECT * FROM CHARACTER_TBL ORDER BY CHARACTER_NAME";
}
<!DOCTYPEhtml>
<html>
<head>
<title>Удаление персонажа</title>
<style>
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
td {font-family: Verdana; color: #0094ff;font-size: 14px;}
th {font-family: Verdana; color: #0094ff;font-size: 16px;}
table, th, td {border: solid2px#0094ff;border-collapse:collapse;padding:2px;}
</style>
</head>
<body>
<h1>Удаление персонажа</h1>
<formmethod="post"action=""name="form">
<tableborder="1">
<thead>
<tr>
<th>&nbsp;</th>
<th>Персонаж</th>
<th>Характер</th>
<th>Семейное положение</th>
</tr>
</thead>
<tbody>
@foreach (var row indb.Query(selectQueryString)) {
<tr>
<td><ahref="@Href("~/DeleteCharacter", row.CHARACTER_ID)">Удалить</a></td>
<td>@row.CHARACTER_NAME</td>
<td>@row.CHARACTER_DESCRIPTION</td>
<td>@row.FAMILY_STATUS</td>
</tr>
}
</tbody>
</table>
</form>
</body>
</html>
    

DeleteCharacter.cshtml

@{
vardb = Database.Open("Dream");   
varCharacterId = UrlData[0];
var character = db.QuerySingle("SELECT * FROM CHARACTER_TBL WHERE CHARACTER_ID = @0", CharacterId);
if (IsPost&& !CharacterId.IsEmpty()) {
vardeleteQueryString = "DELETE FROM CHARACTER_TBL WHERE CHARACTER_ID=@0";
db.Execute(deleteQueryString, CharacterId);  
Response.Redirect("~/ListOfCharactersForDelete");
   }
}
<!DOCTYPEhtml>
<html>
<head>
<title>Удалениеперсонажа</title>
<styletype="text/css">
h1 {font-family: 'Comic Sans MS'; color: #0094ff;font-size: 16px;}
p { font-family: Verdana; color: #0094ff;font-size: 14px;}
</style>
</head>
<body>
<h1>Подтверждение удаления персонажа</h1>
<formmethod="post"action=""name="form">
<p>Действительно удалить этого персонажа?</p>
<p>Персонаж: @character.CHARACTER_NAME<br/>
        Характер: @character.CHARACTER_DESCRIPTION<br/>
        Семейное положение: @character.FAMILY_STATUS</p>
<p><inputtype="submit"value="Удалить"/></p>
</form>
</body>
</html>
    
< Лекция 6 || Практическая работа 10: 12 || Практическая работа 11 >
Александр Лобанов
Александр Лобанов

Даю задания для студентов. Они хотят повторно пройти курс. Как отписаться от выполненного курса, что бы пройти его заново?

Анна Королева
Анна Королева
Беларусь, Минск, Беларуский Государственный Университет Информатики и Радиоэлектроники, 1998
Аббас Гусенов
Аббас Гусенов
Казахстан, Алматы, Казахский национальный технический университет имени К.И. Сатпаева, 2013