SlideShare a Scribd company logo
Темы лекции: ASP.NET. Web Forms. Часть 2.
Практическое задание: ASP.NET. Web Forms.
Тренер: Игорь Шкулипа, к.т.н.
Разработка Веб-приложений на платформе
Microsoft .NET Framework.
Занятие 6
http://www.slideshare.net/IgorShkulipa 2
Привязка данных
Привязка данных — это средство, которое позволяет ассоциировать
источник данных с элементом управления с целью автоматического
отображения данных в этом элементе управления. Ключевой
характеристикой привязки данных являет ее декларативный, а не
программный характер. Это значит, что привязка данных
определена вне кода, наряду с элементами управления, на странице
.aspx. Преимущество состоит в том, что такой подход позволяет
достичь более четкого разделения между элементами управления и
логикой кода веб-страницы.
В ASP.NET большинство элементов управления (включая TextBox,
LinkButton, Image и многие другие) поддерживают привязку данных с
одним значением (single-value). Такая привязка позволяет связать
свойство элемента управления с источником данных, но элемент
управления может отображать единственное значение. Привязываемое
свойство не обязательно должно отображать нечто видимое на
странице. Например, можно не только привязать текст гиперссылки,
установив свойство Hyperlink.Text, но также привязать свойство
NavigateUrl для указания целевого назначения ссылки. Для
использования привязки одного значения создаются выражения
привязки данных.
http://www.slideshare.net/IgorShkulipa 3
Множественная привязка данных
Многие веб-элементы управления поддерживают привязку с
многократными значениями (repeated-value), это значит, что они
могут отображать наборы элементов. Элементы управления с
многократными значениями включают списки и экранные таблицы
(двумя примерами могут служить ListBox и GridView).
Если элемент управления поддерживает такую привязку, он всегда
предоставляет свойство DataSource, которое принимает объект
данных. (Обычно объекты данных являются некоторого рода
коллекцией, а каждый элемент в коллекции представляет запись
данных.)
http://www.slideshare.net/IgorShkulipa 4
Привязка с одним значением
Элементы управления, которые поддерживают привязку данных в режиме
одного значения, позволяют привязать некоторые из их свойств к
выражению привязки данных. Это выражение вводится в части .aspx
разметки страницы и помещается между разделителями <%# и %>.
<%# выражение %>
Чтобы вычислить выражение привязки вроде этого, вы должны вызвать в
своем коде метод Page.DataBind(). При вызове этого метода ASP.NET
проверяет все выражения на странице и заменяет их
соответствующими значениями.
Если вы забудете вызвать метод DataBind(), выражение привязки не
заполнит элемент управления — вместо этого он просто
отбрасывается во время преобразования страницы в HTML-разметку.
http://www.slideshare.net/IgorShkulipa 5
Привязка с одним значением
Источник для привязки с одним значением может включать значение
свойства, переменную-член или возвращаемое значение функции (до
тех пор, пока свойство, переменная-член или функция имеют доступ
типа protected, public или internal).
Это также может быть любое другое выражение, которое может быть
вычислено во время выполнения, такое как ссылка на свойство
другого элемента управления или результат вычисления с
использованием литеральных значений и операций с ними и т.д.
<%# GetUserName(ID) %>
<%# 1 + (2 * 20) %>
<%# "John " + "Smith" %>
<%# Request.Browser.Browser %>
http://www.slideshare.net/IgorShkulipa 6
Привязка других данных
Можно не только привязать свойство Text элемента управления Label или
TextBox, но также использовать и другие свойства, подобные
ImageUrl элемента управления Image, NavigateUrl элемента
управления HyperLink и даже атрибуту src статического HTML-
дескриптора <img>.
Можно также разместить выражение привязки в любом месте
страницы, не привязывая его ни к какому свойству или атрибуту.
<asp:Image runat="server"
ImageUrl='<%# FilePath %>'
ID="Image1" />
http://www.slideshare.net/IgorShkulipa 7
Другие типы выражений
В ASP.NET также имеется поддержка различного типа выражений,
которые в общем называются $-выражениями, поскольку включают
в себя символ $.
Формально $-выражение — это последовательность кода, которую
можно добавить на страницу .aspx и которая будет вычислена
конструктором выражений во время визуализации страницы.
Конструктор выражений обрабатывает выражение и размещает его как
строковое значение в финальной HTML-разметке.
ASP.NET включает встроенный построитель выражений, который дает
возможность извлекать пользовательские параметры настройки
приложения и информацию строки соединения из файла web.config.
Например, для извлечения параметра настройки приложения по имени
appName из раздела <appSettings> файла web.config можно
использовать следующее выражение:
<asp:Literal Runat="server" Text="<%$ AppSettings:appName %>" />
http://www.slideshare.net/IgorShkulipa 8
Отличия $-выражений и выражений привязки данных
• Выражения привязки данных начинаются с последовательности символов
<%#, а $-выражения — с <%$.
• В отличие от выражений привязки данных, вызывать метод DataBind()
для вычисления $-выражений не нужно. Они всегда вычисляются при
отображении страницы.
• В отличие от выражений привязки данных, $-выражения не могут быть
помещены в любое место страницы. Вместо этого их следует поместить в
дескриптор элемента управления и использовать результат выражения для
установки какого-то свойства элемента управления.
•Первая часть $-выражения указывает имя построителя выражений. Например,
выражение AppSettings:appName работает, потому что выделенный
построитель выражений AppSettingsExpressionBuilder зарегистрирован для
обработки выражений, которые начинаются с AppSettings. Аналогично,
ASP.NET включает ResourceExpressionBuilder для вставки ресурсов и
ConnectionStringExpressionBuilder — для извлечения информации о соединении
из раздела <connectionStrings> файла web.config.
•Формально $-выражения не включают привязку данных, но работают
аналогично выражениям привязки и имеют похожий синтаксис.
http://www.slideshare.net/IgorShkulipa 9
Пользовательские построители выражений
Одним из самых инновационных средств $-выражений является
возможность создания собственных построителей выражений, которые
подключаются к этой платформе.
Например, предположим, что вы хотите создать собственный построитель
выражений, который позволит вставлять случайные числа.
Необходима возможность писать дескрипторы, вроде приведенного
ниже, чтобы отображать случайное число от 1 до 10:
<asp:Label ID="Label1" runat="server" Text="<%$ Random:1,10 %>" />
Все построители выражений должны наследоваться от базового класса
ExpressionBuilder (который находится в пространстве имен
System.Web.Compilation). Самый легкий способ создать простой
построитель выражений состоит предусматривает сначала реализацию
статического метода, выполняющего нужную задачу. В данном случае
статический метод генерирует случайное число:
http://www.slideshare.net/IgorShkulipa 10
Пользовательские построители выражений
Все построители выражений должны наследоваться от базового класса
ExpressionBuilder (который находится в пространстве имен
System.Web.Compilation). Самый легкий способ создать простой построитель
выражений состоит предусматривает реализацию статического метода,
выполняющего нужную задачу.
public class RandomExpressionBuilder : ExpressionBuilder
После реализации всех необходимых методов, построитель выражений можно
скопировать в папку App_Code (или компилировать его отдельно и поместить
DLL-файл сборки в папку Bin).
А, чтобы использовать этот построитель выражений в веб-приложении, понадобится
зарегистрировать его в файле web.config и отобразить на подходящий префикс:
<configuration>
<system.web>
<compilation debug="true">
<expressionBuilders>
<add expressionPrefix="Random”
type="RandomExpressionBuilder"/>
</expressionBuilders>
</compilation>
<!-- ... -->
</system.web>
</configuration>
http://www.slideshare.net/IgorShkulipa 11
Привязка с многократными значениями
ASP.NET включает несколько базовых списковых элементов управления,
которые поддерживают привязку с многократными значениями:
• Все элементы управления, которые генерируют свой код с
использованием дескриптора <select>, включая HtmlSelect, ListBox и
DropDownList.
• Элементы управления CheckBoxList и RadioButtonList, генерирующие
каждый дочерний элемент в виде отдельного флажка или
переключателя.
• Элемент управления BulletedList, создающий список с метками или
пронумерованными пунктами.
http://www.slideshare.net/IgorShkulipa 12
Свойства элементов с многократной привязкой
Свойство Описание
DataSource
Это объект данных, содержащий коллекцию элементов данных для
отображения. Должен реализовывать один из интерфейсов,
поддерживаемых привязкой данных ASP.NET, обычно ICollection
DataSourceID
Установив это свойство, вместо передачи объекта данных в коде можно
связать списковый элемент управления с элементом управления источником
данных. Элемент управления источником данных сгенерирует требуемый
объект данных автоматически. Использовать можно либо свойство
DataSource, либо DataSourceID, но не оба сразу
DataTextField
Каждый источник данных представляет коллекцию элементов данных.
Списковый элемент управления может отображать только одно значение из
каждого элемента списка. DataTextField указывает столбец (в случае строки
таблицы) или свойство (в случае объекта) элемента данных, которое
содержит значение, отображаемое на странице
DataTextFormatString
Это свойство указывает необязательную строку формата, которую будет
использовать элемент управления для форматирования каждого
DataTextField перед его отображением. Например, можно указать, что число
должно быть форматировано в виде денежного значения
DataValueField
Это свойство подобно DataTextField, но значение самого элемента данных
на странице не отображается. Вместо этого оно сохраняется в атрибуте
value лежащего в основе HTML-дескриптора. Это позволяет извлечь
значение позже в коде. Главное назначение этого поля — хранить
уникальный идентификатор или поле первичного ключа с тем, чтобы вы
могли использовать его позднее для извлечения остальных данных, когда
пользователь выберет конкретный элемент
http://www.slideshare.net/IgorShkulipa 13
Привязка к SqlDataSource
Элементы управления источниками данных включают любые элементы
управления, реализующие интерфейс IDataSource: SqlDataSource,
ObjectDataSource, XmlDataSource, SiteMapDataSource и
LinqDataSource.
Элемент SqlDataSource позволяет подключаться к любому источнику
данных, который имеет поставщика данных ADO.NET. Сюда относятся
SQL Server, Oracle и OLE DB или ODBC. Используя этот элемент, писать
код доступа к данным не понадобится.
Элемент SqlDataSource может решать две основных задачи:
• извлекать данные из источника и применять к связанным
элементам управления
• обновлять источник данных, когда в связанных элементах
управления выполняется редактирование
http://www.slideshare.net/IgorShkulipa 14
Жизнь страницы с SqlDataSource
• Создается объект страницы.
• Начинается жизненный цикл страницы, инициируются события
Page.Init и Page.Load.
• Происходят все остальные события элементов управления.
• Элементы управления источниками данных выполняют любые
обновления. Если обновляется строка, генерируются события Updating
и Updated. Если строка вставляется — то события Inserting и Inserted.
Если строка удаляется — Deleting и Deleted.
• Генерируется событие Page.PreRender.
• Элементы управления источниками данных выполняют необходимые
запросы и вставляют полученные данные в связанные элементы
управления. Здесь генерируются события Selecting и Selected.
• Страница отображается и освобождается.
http://www.slideshare.net/IgorShkulipa 15
Привязка к SqlDataSource с одним значением
К сожалению, свойство DataTextField ожидает имя только одного поля.
Однако эту проблему можно решить посредством простого, но
эффективного трюка — использования вычисляемого столбца.
Для этого понадобится просто модифицировать запрос SELECT так, чтобы
он создавал вычисляемый столбец, содержащий информацию из этих
двух полей.
Затем этот столбец можно применять в DataTextField. Необходимая
команда SQL выглядит следующим образом:
SELECT EmployeeID, FirstName + ' ' + LastName AS FullName FROM
Employees
http://www.slideshare.net/IgorShkulipa 16
Многофункциональные элементы управления данными
В дополнение к простым списковым элементам управления ASP.NET включает набор
многофункциональных элементов управления данными для поддержки привязки
с многократными значениями. К многофункциональным элементам управления
относятся:
• GridView - табличный элемент управления общего назначения для отображения
больших таблиц информации. Поддерживает выбор, редактирование, сортировку
и перемещение по страницам. GridView — "тяжеловес" среди элементов
управления ASP.NET. Он является потомком DataGrid из ASP.NET 1.x.
• DetailsView - Идеальный выбор для показа одной записи за раз в таблице,
имеющей одну строку на поле. DetailsView поддерживает редактирование и
необязательно возможность перемещения по страницам, что позволяет
просматривать последовательности записей.
• FormView - Как и DetailsView, элемент FormView отображает по одной записи за
раз, поддерживает редактирование и предоставляет элементы управления для
перемещения по последовательности записей. Отличие состоит в том, что
FormView основан на шаблонах, а это позволяет комбинировать поля гораздо
более гибким образом, не обязательно основанным на таблице.
В дополнение к перечисленным здесь элементам управления привязку данных
поддерживают еще некоторые более специализированные элементы управления
ASP.NET. Сюда входят Menu, TreeView и AdRotator.
http://www.slideshare.net/IgorShkulipa 17
Кэширование
Кэширование - это технология хранения в памяти копии информации,
которую дорого создавать повторно. Например, можно кэшировать
результаты сложного запроса, так что для повторного его выполнения
вообще не потребуется обращаться к базе данных. Вместо этого
соответствующий объект будет извлечен непосредственно из памяти
сервера, что намного быстрее.
Изящество кэширования в том. что в отличие от многих других приемов
повышения производительности, оно увеличивает как
производительность, так и масштабируемость. Производительность
растет благодаря значительному снижению времени, необходимого на
извлечение информации. Масштабируемость же становится лучше
благодаря тому, что обходятся узкие места — вроде соединений с
базой данных. В результате приложение может обслужить больше
запросов страниц одновременно при меньшем количестве операций с
базой данных.
http://www.slideshare.net/IgorShkulipa 18
Кэширование
Среда ASP.NET поддерживает два типа кэширования. Ваши приложения
могут, да и должны, использовать оба типа, т.к. они дополняют друг
друга:
• Кэширование вывода
Это простейший тип кэширования. При этом сохраняется копия
окончательно сгенерированной HTML-страницы, отправленной
клиенту. Следующий клиент, который запросит эту же страницу, на
самом деле не будет ожидать ее построения. Готовая HTML-разметка
будет отправлена ему автоматически. Время, необходимое на
выполнение кода страницы, полностью экономится.
• Кэширование данных
Этим кэшированием можно управлять вручную в коде. Чтобы
использовать кэширование данных, вы сохраняете в кэше важные
части информации, которые требуют значительного времени на
повторную реконструкцию (например, объект DataSet, извлеченный
из базы данных). Другие страницы могут проверить существование
этой информации и пользоваться ею — таким образом, пропуская
шаги, обычно подлежащие выполнению для ее получения.
http://www.slideshare.net/IgorShkulipa 19
Кэширование
На основе этих моделей построены также два специализированных типа
кэширования:
• Кэширование фрагментов.
Это специализированный тип кэширования вывода — вместо
кэширования HTML-страниц целиком оно позволяет кэшировать HTML-
разметку по частям. Этот механизм работает за счет сохранения
обработанного HTML-вывода для пользовательских элементов
управления на странице. В следующий раз, когда выполняется данная
страница, генерируются те же события (и потому код страницы будет
работать по-прежнему), но код соответствующих пользовательских
элементов управления уже не выполняется.
• Кэширование источников данных.
Это кэширование, встроенное в элементы управления источниками
данных, в том числе SqlDataSource, ObjectDataSource и XmlDataSource.
Формально кэширование источников данных использует кэширование
данных. Отличие в том, что управлять этим процессом явно не
приходится. Вместо этого нужно просто сконфигурировать
соответствующие свойства, и элемент управления источником данных
будет управлять процессом сохранения и извлечения из кэша.
http://www.slideshare.net/IgorShkulipa 20
Кэширование вывода
При кэшировании вывода в памяти сохраняется окончательная
сгенерированная HTML-разметка страницы. Когда та же самая
страница запрашивается вновь, объекты элементов управления не
создаются заново, жизненный цикл страницы не запускается и ничего
из вашего кода не выполняется. Вместо этого пользователю
доставляется кэшированная HTML-разметка. Ясно, что кэширование
вывода теоретически обеспечивает максимальный рост
производительности, поскольку исключаются все накладные расходы,
связанные с выполнением кода.
Страница ASP.NET может использовать другие статические ресурсы (такие
как изображения), которые не обрабатываются ASP.NET. Не
беспокойтесь об их кэшировании. Веб-сервер IIS автоматически
обрабатывает кэширование файлов наиболее эффективным из
возможных способом.
Декларативное кэширование вывода
<%@ OutputCache Duration="20" VaryByParam="None" %>
http://www.slideshare.net/IgorShkulipa 21
Кэширование данных
Кэширование данных - наиболее гибкий тип кэширования, однако для своей
реализации он требует выполнения в коде ряда дополнительных шагов.
Базовый принцип кэширования данных состоит в добавлении элементов,
создание которых обходится дорого, в специальный встроенный объект
коллекции (называемый Cache). Этот объект доступен глобально всем
запросам от всех клиентов в приложении.
• Объект Cache является безопасным в отношении потоков
• Элементы из кэша удаляются автоматически
• Элементы кэша поддерживают зависимости
Добавлять элемент в коллекцию Cache можно простым присваиванием
нового имени ключа:
Cache["key"] = item;
Однако такой подход обычно не применяется, потому что он не позволяет
получить контроль над временем нахождения объекта в кэше. Более
предпочтительный подход заключается в применении метода Insert().
http://www.slideshare.net/IgorShkulipa 22
Cache.Insert()
Метод Описание
Cache.Insert(key, value)
Вставляет элемент в кэш под указанным ключевым
именем, используя приоритет и время существования
по умолчанию. Это эквивалентно применению
синтаксиса коллекции на основе индекса и
присваиванию нового ключевого имени
Cache.Insert(key, value,
dependencies)
Вставляет элемент в кэш под указанным ключевым
именем, используя приоритет и время существования
по умолчанию. Последний параметр содержит объект
CacheDependency, связанный с другими файлами или
кэшируемыми элементами и позволяющий объявлять
данный элемент недействительным в случае их
изменения
Cache.Insert(key, value,
dependencies, absoluteExpiration,
slidingExpiration)
Вставляет элемент в кэш под указанным ключевым
именем, используя приоритет и указанную политику
устаревания (одну из двух). Эта версия метода Insert()
используется наиболее часто
Cache.Insert(key, value,
dependencies, absoluteExpiration,
slidingExpiration, priority,
onRemoveCallback)
Позволяет конфигурировать все аспекты политики
кэширования элемента, включая время существования,
зависимости и приоритет. Вдобавок можно передать
делегат, указывающий на метод, который должен быть
вызван при удалении элемента из кэша
http://www.slideshare.net/IgorShkulipa 23
Приоритеты кэширования. Перечисление CachePriority
Значение Описание
High
Эти элементы имеют минимальную вероятность удалений
из кэша, когда сервер будет освобождать системную
память
AboveNormal Удаление этих элементов менее вероятно, чем имеющих
приоритет Normal
Normal
Эти элементы имеют уровень приоритета по умолчанию.
Они могут быть удалены только после удаления элементов
с приоритетами Low и BelowNormal
BelowNormal Удаление этих элементов более вероятно, чем элементов с
приоритетом Normal
Low Удаление из кэша элементов с этим приоритетом наиболее
вероятно при очистке системной памяти сервером
NotRemovable Элементы с таким приоритетом обычно не удаляются из
кэша при очистке системной памяти сервером
http://www.slideshare.net/IgorShkulipa 24
Свойства элементов управления источниками данных,
связанные с кэшированием
Свойство Описание
EnableCaching Если равно true, то кэширование включено.
Значением по умолчанию является false
CacheExpirationPolicy
Использует значения из перечисления
DataSourceCacheExpiry: Absolute - для абсолютного
устаревания (когда указывается фиксированное
время нахождение объекта в кэше) или Sliding - для
скользящего устаревания (когда временное окно
сбрасывается при каждом извлечении объекта из
кэша)
CacheDuration
Время в секундах нахождения объекта в кэше. Если
используется скользящее устаревание, временной
предел сбрасывается каждый раз, когда объект
извлекается из кэша. Значение по умолчанию - 0 (или
Infinite) - позволяет хранить кэшированные элементы
бесконечно
CacheKeyDependency и
SqlCacheDependency
Позволяет установить зависимость одного
кэшированного элемента от другого
(CacheKeyDependency) или от таблицы в базе данных
(SqlCacheDependency).
http://www.slideshare.net/IgorShkulipa 25
Пример. Default.aspx
<%@ Page Title="Home Page" Language="C#“
MasterPageFile="~/Site.Master"
AutoEventWireup="true"
CodeBehind="Default.aspx.cs"
Inherits="WFApplication1._Default" %>
<asp:Content runat="server" ID="FeaturedContent"
ContentPlaceHolderID="FeaturedContent">
</asp:Content>
<asp:Content runat="server" ID="BodyContent"
ContentPlaceHolderID="MainContent">
<div class="singlebinding">
<asp:TextBox ID="TextBox1" runat="server"
Text="<%#data.TextBoxText%>"></asp:TextBox>
<asp:Label ID="Label1" runat="server"
Text="<%#data.LabelText%>"></asp:Label>
<asp:Label ID="Label2" runat="server"
Text="<%#data.GetRandom(1,10)%>"></asp:Label>
<asp:Label ID="Label3" runat="server"
Text="<%$Random:1,10%>"></asp:Label>
</div>
http://www.slideshare.net/IgorShkulipa 26
Пример. Default.aspx
<div class="multibinding">
<asp:ListBox ID="ListBox1" runat="server" Width="100" Height="150"
DataSource="<%#data.ListBoxItems%>"
DataTextField="Text" DataValueField="Value"
OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"
AutoPostBack="true" OnTextChanged="ListBox1_TextChanged">
</asp:ListBox>
<asp:DetailsView ID="DetailsView1" runat="server"
BorderColor="Black" BorderWidth="1"
Width="350" Height="150"
EmptyDataText="No data"
AutoGenerateRows="false">
<Fields>
<asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True"
SortExpression="Name" />
<asp:BoundField DataField="Middle" HeaderText="Middle" ReadOnly="True"
SortExpression="Middle" />
<asp:BoundField DataField="Surname" HeaderText="Surname"
ReadOnly="True" SortExpression="Surname" />
<asp:BoundField DataField="Birthday" HeaderText="Birthday"
ReadOnly="True" SortExpression="Birthday" />
<asp:BoundField DataField="Address" HeaderText="Address"
ReadOnly="True" SortExpression="Address" />
<asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True"
SortExpression="Phone" />
<asp:BoundField DataField="Email" HeaderText="Email" ReadOnly="True“
SortExpression="Email" />
</Fields>
</asp:DetailsView>
</div>
</asp:Content>
http://www.slideshare.net/IgorShkulipa 27
Пример. Default.aspx.cs
public class ContactClass
{
public int ID;
public string Name { get; set; }
public string Middle { get; set; }
public string Surname { get; set; }
public DateTime Birthday { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
}
http://www.slideshare.net/IgorShkulipa 28
Пример. Default.aspx.cs
public class DataForBinding {
public DataForBinding() {
random = new Random();
TextBoxText = "Hello, Data Binding!";
LabelText = "Random Number:";
TableItems = new List<ContactClass>();
TableItems.Add(new ContactClass {
ID=1, Name = "Ivan",
Middle = "Ivanovich",
Surname = "Ivanov",
Birthday = Convert.ToDateTime("01/01/1980"),
Address = "Ivanovo, Ivanova st., 1",
Phone = "+123 45 678 90 00",
Email = "ivan@ivanov.com" });
TableItems.Add(new ContactClass {
ID=2, Name = "Petr",
Middle = "Petrovich",
Surname = "Petrov",
Birthday = Convert.ToDateTime("02/02/1980"),
Address = "Petrovo, Petrova st., 2",
Phone = "+098 76 543 21 00",
Email = "petr@petrov.ua" });
TableItems.Add(new ContactClass {
ID=3, Name = "Sidor",
Middle = "Sidorovich",
Surname = "Sidorov",
Birthday = Convert.ToDateTime("03/03/1980"),
Address = "Sidorovo, Sidorova st., 1",
Phone = "+765 43 210 98 76",
Email = "sidor@sidorov.org"
});
}
http://www.slideshare.net/IgorShkulipa 29
Пример. Default.aspx.cs
public string TextBoxText { get; set; }
public string LabelText { get; set; }
public List<ListItem> ListBoxItems
{
get {
var result = from c in TableItems
where true
select new ListItem(c.Name, c.ID.ToString());
return result.ToList<ListItem>();
}
set { }
}
public List<ContactClass> TableItems { get; set; }
public int CurrentID { get; set; }
public List<ContactClass> CurrentContact
{
get {
var result = from c in TableItems
where c.ID==CurrentID
select c;
return result.ToList<ContactClass>();
}
set { }
}
private Random random;
public string GetRandom(int from, int to)
{
return random.Next(from, to).ToString();
}
}
http://www.slideshare.net/IgorShkulipa 30
Пример. Default.aspx.cs
public partial class _Default : Page
{
protected DataForBinding data;
protected void Page_Load(object sender, EventArgs e)
{
data = new DataForBinding();
if (!IsPostBack)
{
this.DataBind();
}
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
foreach (ListItem it in ListBox1.Items)
{
if (it.Selected)
{
data.CurrentID = Convert.ToInt32(it.Value);
DetailsView1.DataSource = data.CurrentContact;
DetailsView1.DataBind();
Label2.DataBind();
}
}
}
}
http://www.slideshare.net/IgorShkulipa 31
EditData.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master"
AutoEventWireup="true" CodeBehind="EditData.aspx.cs"
Inherits="WFApplication1.EditData" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<div class="multibinding">
<asp:ListBox ID="ListBox1" runat="server" Width="100" Height="150"
DataTextField="Text" DataValueField="Value"
AutoPostBack="true">
</asp:ListBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server“
ProviderName="System.Data.SqlClient"
ConnectionString="<%$ connectionStrings:Database1Connection %>"
SelectCommand="SELECT CID, CName, CMiddle, CSurname, CEmail FROM Contacts;"
InsertCommand="INSERT INTO Contacts(CName, CMiddle, CSurname, CEmail)
VALUES(@CName, @CMiddle, @CSurname, @CEmail)"
UpdateCommand="UPDATE Contacts SET CName=@CName, CMiddle=@CMiddle,
CSurname=@CSurname, CEmail=@CEmail FROM Contacts WHERE CID=@CID"
DeleteCommand="DELETE FROM Contacts WHERE CID=@CID" />
http://www.slideshare.net/IgorShkulipa 32
EditData.aspx
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1"
AutoGenerateColumns="false"
AutoGenerateDeleteButton="true"
AutoGenerateEditButton="true"
DataKeyNames="CID">
<Columns>
<asp:BoundField DataField="CID" HeaderText="№" />
<asp:BoundField DataField="CName" HeaderText="Имя" />
<asp:BoundField DataField="CMiddle" HeaderText="Отчество" />
<asp:BoundField DataField="CSurname" HeaderText="Фамилия" />
<asp:BoundField DataField="CEmail" HeaderText="Почта" />
</Columns>
</asp:GridView>
</div>
</asp:Content>
http://www.slideshare.net/IgorShkulipa 33
RandomExpressionBuilder
public class RandomExpressionBuilder : ExpressionBuilder {
public override CodeExpression GetCodeExpression(
BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context) {
string[] numbers = entry.Expression.Split(',');
int from = Convert.ToInt32(numbers[0]);
int to = Convert.ToInt32(numbers[1]);
// Получить ссылку на класс, имеющий метод GetRandom().
CodeTypeReferenceExpression typeRef =
new CodeTypeReferenceExpression(this.GetType());
// Определить параметры для GetRandom().
CodeExpression[] methodParameters = new CodeExpression[2];
methodParameters[0] = new CodePrimitiveExpression(from);
methodParameters[1] = new CodePrimitiveExpression(to);
// Вернуть выражение привязки вызвав метод GetRandom()
CodeMethodInvokeExpression methodCall =
new CodeMethodInvokeExpression(
typeRef, "GetRandom", methodParameters);
return methodCall;
}
public static string GetRandom(int from, int to) {
Random random = new Random();
return random.Next(from, to).ToString();
}
}
}
http://www.slideshare.net/IgorShkulipa 34
Web.config
<connectionStrings>
<add name="DefaultConnection" providerName="System.Data.SqlClient“
connectionString="Data Source=(LocalDb)v11.0;
Initial Catalog=aspnet-WFApplication1-20141024134931;Integrated
Security=SSPI;
AttachDBFilename=|DataDirectory|aspnet-WFApplication1-20141024134931.mdf" />
<add name="Database1Connection" providerName="System.Data.SqlClient“
connectionString="Data Source=(LocalDb)v11.0;
Initial Catalog=aspnet-WFApplication1-20141024134931;
Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|Database1.mdf" />
</connectionStrings>
...
<system.web>
<compilation debug="true" targetFramework="4.5" >
<expressionBuilders>
<add expressionPrefix="Random“
type="WFApplication1.App_Code.RandomExpressionBuilder"/>
</expressionBuilders>
</compilation>
http://www.slideshare.net/IgorShkulipa 35
Результат
http://www.slideshare.net/IgorShkulipa 36
Результат
http://www.slideshare.net/IgorShkulipa 37
Результат
http://www.slideshare.net/IgorShkulipa 38
Результат
http://www.slideshare.net/IgorShkulipa 39
Лабораторная работа № 6.
Выполнить лабораторную работу №5 с использованием привязки данных.
Подключить базу данных и Entity Framework.

More Related Content

Viewers also liked

C++ Базовый. Занятие 07.
C++ Базовый. Занятие 07.C++ Базовый. Занятие 07.
C++ Базовый. Занятие 07.
Igor Shkulipa
 
UP TO DATE CV
UP TO DATE CVUP TO DATE CV
UP TO DATE CV
David Jeremiah
 
Media A2 evaluation
Media A2 evaluationMedia A2 evaluation
Media A2 evaluation
smithyboy6666
 
HEWA_Syringe_Services_Programs_10232013(2)
HEWA_Syringe_Services_Programs_10232013(2)HEWA_Syringe_Services_Programs_10232013(2)
HEWA_Syringe_Services_Programs_10232013(2)
Mary Beth Levin
 
MN CleanEnergyEconomyProfile-Web
MN CleanEnergyEconomyProfile-WebMN CleanEnergyEconomyProfile-Web
MN CleanEnergyEconomyProfile-Web
Anna Henderson
 
The journey of flipkart
The journey of flipkartThe journey of flipkart
The journey of flipkart
anvithaphutane
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
Anwar Pérez
 
Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)
Shivakumar Jayaraman
 
Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressedJamie Singleton
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
Igor Shkulipa
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
Igor Shkulipa
 
assignment
assignmentassignment
assignment
Eman Elnezami
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajarsanty1301
 
Happily_Disconnected
Happily_DisconnectedHappily_Disconnected
Happily_Disconnected
Amber Perkins
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
Laila Jaleel
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
Ida Morán
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
Igor Shkulipa
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados
Ida Morán
 
Time Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self careTime Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self care
Andrea Fortuin
 

Viewers also liked (20)

C++ Базовый. Занятие 07.
C++ Базовый. Занятие 07.C++ Базовый. Занятие 07.
C++ Базовый. Занятие 07.
 
UP TO DATE CV
UP TO DATE CVUP TO DATE CV
UP TO DATE CV
 
Media A2 evaluation
Media A2 evaluationMedia A2 evaluation
Media A2 evaluation
 
HEWA_Syringe_Services_Programs_10232013(2)
HEWA_Syringe_Services_Programs_10232013(2)HEWA_Syringe_Services_Programs_10232013(2)
HEWA_Syringe_Services_Programs_10232013(2)
 
MN CleanEnergyEconomyProfile-Web
MN CleanEnergyEconomyProfile-WebMN CleanEnergyEconomyProfile-Web
MN CleanEnergyEconomyProfile-Web
 
The journey of flipkart
The journey of flipkartThe journey of flipkart
The journey of flipkart
 
Energías limpias
Energías limpiasEnergías limpias
Energías limpias
 
Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)Pest & Fumi-(Shiva Resume)
Pest & Fumi-(Shiva Resume)
 
Organists Review.compressed
Organists Review.compressedOrganists Review.compressed
Organists Review.compressed
 
C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.C++ Базовый. Занятие 08.
C++ Базовый. Занятие 08.
 
C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.C++ Базовый. Занятие 14.
C++ Базовый. Занятие 14.
 
Print Brochure 3NM v6
Print Brochure 3NM v6Print Brochure 3NM v6
Print Brochure 3NM v6
 
assignment
assignmentassignment
assignment
 
Mid map gaya belajar
Mid map gaya belajarMid map gaya belajar
Mid map gaya belajar
 
Happily_Disconnected
Happily_DisconnectedHappily_Disconnected
Happily_Disconnected
 
Production diary 3
Production diary 3Production diary 3
Production diary 3
 
Trabajo completo correcion
Trabajo completo correcionTrabajo completo correcion
Trabajo completo correcion
 
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 01.
 
Capitulo IV análisis de resultados
Capitulo IV análisis de resultados Capitulo IV análisis de resultados
Capitulo IV análisis de resultados
 
Time Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self careTime Out - A beginners guide to meditation for self care
Time Out - A beginners guide to meditation for self care
 

Similar to C# Web. Занятие 06.

The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
Vitaly Baum
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
Igor Shkulipa
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
DataArt
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
SQALab
 
Entity framework
Entity frameworkEntity framework
Entity frameworkScaiper
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
GetDev.NET
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
Denys Sosuliev
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
DEVTYPE
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Andrey Taritsyn
 
MWWM
MWWMMWWM
MWWM
Cleveroad
 
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
Alexander Byndyu
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
Igor Shkulipa
 
Web deployment
Web deploymentWeb deployment
Web deployment
GetDev.NET
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
PyNSK
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11
olgaoov
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
Igor Shkulipa
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
Pavel Usachev
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
mikhailshurgulaya
 

Similar to C# Web. Занятие 06. (20)

The Old New ASP.NET
The Old New ASP.NETThe Old New ASP.NET
The Old New ASP.NET
 
C# Web. Занятие 05.
C# Web. Занятие 05.C# Web. Занятие 05.
C# Web. Занятие 05.
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
Оптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержкиОптимизация Selenium тестов и ускорение их поддержки
Оптимизация Selenium тестов и ускорение их поддержки
 
Entity framework
Entity frameworkEntity framework
Entity framework
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Ci
CiCi
Ci
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
Grails & Groovy
Grails & GroovyGrails & Groovy
Grails & Groovy
 
Диаграмма компонентов
Диаграмма компонентовДиаграмма компонентов
Диаграмма компонентов
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 
MWWM
MWWMMWWM
MWWM
 
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
Metadata + JavaScript = ♥ Применение метаданных ViewModel для конфигурировани...
 
C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11
 
C# Web. Занятие 04.
C# Web. Занятие 04.C# Web. Занятие 04.
C# Web. Занятие 04.
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Inroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAPInroducing SAP ABAP - Presentation with basics SAP ABAP
Inroducing SAP ABAP - Presentation with basics SAP ABAP
 

More from Igor Shkulipa

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
Igor Shkulipa
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
Igor Shkulipa
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
Igor Shkulipa
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
Igor Shkulipa
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
Igor Shkulipa
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
Igor Shkulipa
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
Igor Shkulipa
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
Igor Shkulipa
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
Igor Shkulipa
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
Igor Shkulipa
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
Igor Shkulipa
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
Igor Shkulipa
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
Igor Shkulipa
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
Igor Shkulipa
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
Igor Shkulipa
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
Igor Shkulipa
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
Igor Shkulipa
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
Igor Shkulipa
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
Igor Shkulipa
 

More from Igor Shkulipa (20)

Общие темы. Тема 03.
Общие темы. Тема 03. Общие темы. Тема 03.
Общие темы. Тема 03.
 
Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
Общие темы. Тема 01.
Общие темы. Тема 01.Общие темы. Тема 01.
Общие темы. Тема 01.
 
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 06.
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 10.
 
JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.JavaScript Базовый. Занятие 05.
JavaScript Базовый. Занятие 05.
 
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 08.
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 04.
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.JavaScript Базовый. Занятие 02.
JavaScript Базовый. Занятие 02.
 
C# Web. Занятие 08.
C# Web. Занятие 08.C# Web. Занятие 08.
C# Web. Занятие 08.
 
C# Web. Занятие 12.
C# Web. Занятие 12.C# Web. Занятие 12.
C# Web. Занятие 12.
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
C# Web. Занятие 15.
C# Web. Занятие 15.C# Web. Занятие 15.
C# Web. Занятие 15.
 
C# Web. Занятие 13.
C# Web. Занятие 13.C# Web. Занятие 13.
C# Web. Занятие 13.
 
C# Web. Занятие 10.
C# Web. Занятие 10.C# Web. Занятие 10.
C# Web. Занятие 10.
 

C# Web. Занятие 06.

  • 1. Темы лекции: ASP.NET. Web Forms. Часть 2. Практическое задание: ASP.NET. Web Forms. Тренер: Игорь Шкулипа, к.т.н. Разработка Веб-приложений на платформе Microsoft .NET Framework. Занятие 6
  • 2. http://www.slideshare.net/IgorShkulipa 2 Привязка данных Привязка данных — это средство, которое позволяет ассоциировать источник данных с элементом управления с целью автоматического отображения данных в этом элементе управления. Ключевой характеристикой привязки данных являет ее декларативный, а не программный характер. Это значит, что привязка данных определена вне кода, наряду с элементами управления, на странице .aspx. Преимущество состоит в том, что такой подход позволяет достичь более четкого разделения между элементами управления и логикой кода веб-страницы. В ASP.NET большинство элементов управления (включая TextBox, LinkButton, Image и многие другие) поддерживают привязку данных с одним значением (single-value). Такая привязка позволяет связать свойство элемента управления с источником данных, но элемент управления может отображать единственное значение. Привязываемое свойство не обязательно должно отображать нечто видимое на странице. Например, можно не только привязать текст гиперссылки, установив свойство Hyperlink.Text, но также привязать свойство NavigateUrl для указания целевого назначения ссылки. Для использования привязки одного значения создаются выражения привязки данных.
  • 3. http://www.slideshare.net/IgorShkulipa 3 Множественная привязка данных Многие веб-элементы управления поддерживают привязку с многократными значениями (repeated-value), это значит, что они могут отображать наборы элементов. Элементы управления с многократными значениями включают списки и экранные таблицы (двумя примерами могут служить ListBox и GridView). Если элемент управления поддерживает такую привязку, он всегда предоставляет свойство DataSource, которое принимает объект данных. (Обычно объекты данных являются некоторого рода коллекцией, а каждый элемент в коллекции представляет запись данных.)
  • 4. http://www.slideshare.net/IgorShkulipa 4 Привязка с одним значением Элементы управления, которые поддерживают привязку данных в режиме одного значения, позволяют привязать некоторые из их свойств к выражению привязки данных. Это выражение вводится в части .aspx разметки страницы и помещается между разделителями <%# и %>. <%# выражение %> Чтобы вычислить выражение привязки вроде этого, вы должны вызвать в своем коде метод Page.DataBind(). При вызове этого метода ASP.NET проверяет все выражения на странице и заменяет их соответствующими значениями. Если вы забудете вызвать метод DataBind(), выражение привязки не заполнит элемент управления — вместо этого он просто отбрасывается во время преобразования страницы в HTML-разметку.
  • 5. http://www.slideshare.net/IgorShkulipa 5 Привязка с одним значением Источник для привязки с одним значением может включать значение свойства, переменную-член или возвращаемое значение функции (до тех пор, пока свойство, переменная-член или функция имеют доступ типа protected, public или internal). Это также может быть любое другое выражение, которое может быть вычислено во время выполнения, такое как ссылка на свойство другого элемента управления или результат вычисления с использованием литеральных значений и операций с ними и т.д. <%# GetUserName(ID) %> <%# 1 + (2 * 20) %> <%# "John " + "Smith" %> <%# Request.Browser.Browser %>
  • 6. http://www.slideshare.net/IgorShkulipa 6 Привязка других данных Можно не только привязать свойство Text элемента управления Label или TextBox, но также использовать и другие свойства, подобные ImageUrl элемента управления Image, NavigateUrl элемента управления HyperLink и даже атрибуту src статического HTML- дескриптора <img>. Можно также разместить выражение привязки в любом месте страницы, не привязывая его ни к какому свойству или атрибуту. <asp:Image runat="server" ImageUrl='<%# FilePath %>' ID="Image1" />
  • 7. http://www.slideshare.net/IgorShkulipa 7 Другие типы выражений В ASP.NET также имеется поддержка различного типа выражений, которые в общем называются $-выражениями, поскольку включают в себя символ $. Формально $-выражение — это последовательность кода, которую можно добавить на страницу .aspx и которая будет вычислена конструктором выражений во время визуализации страницы. Конструктор выражений обрабатывает выражение и размещает его как строковое значение в финальной HTML-разметке. ASP.NET включает встроенный построитель выражений, который дает возможность извлекать пользовательские параметры настройки приложения и информацию строки соединения из файла web.config. Например, для извлечения параметра настройки приложения по имени appName из раздела <appSettings> файла web.config можно использовать следующее выражение: <asp:Literal Runat="server" Text="<%$ AppSettings:appName %>" />
  • 8. http://www.slideshare.net/IgorShkulipa 8 Отличия $-выражений и выражений привязки данных • Выражения привязки данных начинаются с последовательности символов <%#, а $-выражения — с <%$. • В отличие от выражений привязки данных, вызывать метод DataBind() для вычисления $-выражений не нужно. Они всегда вычисляются при отображении страницы. • В отличие от выражений привязки данных, $-выражения не могут быть помещены в любое место страницы. Вместо этого их следует поместить в дескриптор элемента управления и использовать результат выражения для установки какого-то свойства элемента управления. •Первая часть $-выражения указывает имя построителя выражений. Например, выражение AppSettings:appName работает, потому что выделенный построитель выражений AppSettingsExpressionBuilder зарегистрирован для обработки выражений, которые начинаются с AppSettings. Аналогично, ASP.NET включает ResourceExpressionBuilder для вставки ресурсов и ConnectionStringExpressionBuilder — для извлечения информации о соединении из раздела <connectionStrings> файла web.config. •Формально $-выражения не включают привязку данных, но работают аналогично выражениям привязки и имеют похожий синтаксис.
  • 9. http://www.slideshare.net/IgorShkulipa 9 Пользовательские построители выражений Одним из самых инновационных средств $-выражений является возможность создания собственных построителей выражений, которые подключаются к этой платформе. Например, предположим, что вы хотите создать собственный построитель выражений, который позволит вставлять случайные числа. Необходима возможность писать дескрипторы, вроде приведенного ниже, чтобы отображать случайное число от 1 до 10: <asp:Label ID="Label1" runat="server" Text="<%$ Random:1,10 %>" /> Все построители выражений должны наследоваться от базового класса ExpressionBuilder (который находится в пространстве имен System.Web.Compilation). Самый легкий способ создать простой построитель выражений состоит предусматривает сначала реализацию статического метода, выполняющего нужную задачу. В данном случае статический метод генерирует случайное число:
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пользовательские построители выражений Все построители выражений должны наследоваться от базового класса ExpressionBuilder (который находится в пространстве имен System.Web.Compilation). Самый легкий способ создать простой построитель выражений состоит предусматривает реализацию статического метода, выполняющего нужную задачу. public class RandomExpressionBuilder : ExpressionBuilder После реализации всех необходимых методов, построитель выражений можно скопировать в папку App_Code (или компилировать его отдельно и поместить DLL-файл сборки в папку Bin). А, чтобы использовать этот построитель выражений в веб-приложении, понадобится зарегистрировать его в файле web.config и отобразить на подходящий префикс: <configuration> <system.web> <compilation debug="true"> <expressionBuilders> <add expressionPrefix="Random” type="RandomExpressionBuilder"/> </expressionBuilders> </compilation> <!-- ... --> </system.web> </configuration>
  • 11. http://www.slideshare.net/IgorShkulipa 11 Привязка с многократными значениями ASP.NET включает несколько базовых списковых элементов управления, которые поддерживают привязку с многократными значениями: • Все элементы управления, которые генерируют свой код с использованием дескриптора <select>, включая HtmlSelect, ListBox и DropDownList. • Элементы управления CheckBoxList и RadioButtonList, генерирующие каждый дочерний элемент в виде отдельного флажка или переключателя. • Элемент управления BulletedList, создающий список с метками или пронумерованными пунктами.
  • 12. http://www.slideshare.net/IgorShkulipa 12 Свойства элементов с многократной привязкой Свойство Описание DataSource Это объект данных, содержащий коллекцию элементов данных для отображения. Должен реализовывать один из интерфейсов, поддерживаемых привязкой данных ASP.NET, обычно ICollection DataSourceID Установив это свойство, вместо передачи объекта данных в коде можно связать списковый элемент управления с элементом управления источником данных. Элемент управления источником данных сгенерирует требуемый объект данных автоматически. Использовать можно либо свойство DataSource, либо DataSourceID, но не оба сразу DataTextField Каждый источник данных представляет коллекцию элементов данных. Списковый элемент управления может отображать только одно значение из каждого элемента списка. DataTextField указывает столбец (в случае строки таблицы) или свойство (в случае объекта) элемента данных, которое содержит значение, отображаемое на странице DataTextFormatString Это свойство указывает необязательную строку формата, которую будет использовать элемент управления для форматирования каждого DataTextField перед его отображением. Например, можно указать, что число должно быть форматировано в виде денежного значения DataValueField Это свойство подобно DataTextField, но значение самого элемента данных на странице не отображается. Вместо этого оно сохраняется в атрибуте value лежащего в основе HTML-дескриптора. Это позволяет извлечь значение позже в коде. Главное назначение этого поля — хранить уникальный идентификатор или поле первичного ключа с тем, чтобы вы могли использовать его позднее для извлечения остальных данных, когда пользователь выберет конкретный элемент
  • 13. http://www.slideshare.net/IgorShkulipa 13 Привязка к SqlDataSource Элементы управления источниками данных включают любые элементы управления, реализующие интерфейс IDataSource: SqlDataSource, ObjectDataSource, XmlDataSource, SiteMapDataSource и LinqDataSource. Элемент SqlDataSource позволяет подключаться к любому источнику данных, который имеет поставщика данных ADO.NET. Сюда относятся SQL Server, Oracle и OLE DB или ODBC. Используя этот элемент, писать код доступа к данным не понадобится. Элемент SqlDataSource может решать две основных задачи: • извлекать данные из источника и применять к связанным элементам управления • обновлять источник данных, когда в связанных элементах управления выполняется редактирование
  • 14. http://www.slideshare.net/IgorShkulipa 14 Жизнь страницы с SqlDataSource • Создается объект страницы. • Начинается жизненный цикл страницы, инициируются события Page.Init и Page.Load. • Происходят все остальные события элементов управления. • Элементы управления источниками данных выполняют любые обновления. Если обновляется строка, генерируются события Updating и Updated. Если строка вставляется — то события Inserting и Inserted. Если строка удаляется — Deleting и Deleted. • Генерируется событие Page.PreRender. • Элементы управления источниками данных выполняют необходимые запросы и вставляют полученные данные в связанные элементы управления. Здесь генерируются события Selecting и Selected. • Страница отображается и освобождается.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Привязка к SqlDataSource с одним значением К сожалению, свойство DataTextField ожидает имя только одного поля. Однако эту проблему можно решить посредством простого, но эффективного трюка — использования вычисляемого столбца. Для этого понадобится просто модифицировать запрос SELECT так, чтобы он создавал вычисляемый столбец, содержащий информацию из этих двух полей. Затем этот столбец можно применять в DataTextField. Необходимая команда SQL выглядит следующим образом: SELECT EmployeeID, FirstName + ' ' + LastName AS FullName FROM Employees
  • 16. http://www.slideshare.net/IgorShkulipa 16 Многофункциональные элементы управления данными В дополнение к простым списковым элементам управления ASP.NET включает набор многофункциональных элементов управления данными для поддержки привязки с многократными значениями. К многофункциональным элементам управления относятся: • GridView - табличный элемент управления общего назначения для отображения больших таблиц информации. Поддерживает выбор, редактирование, сортировку и перемещение по страницам. GridView — "тяжеловес" среди элементов управления ASP.NET. Он является потомком DataGrid из ASP.NET 1.x. • DetailsView - Идеальный выбор для показа одной записи за раз в таблице, имеющей одну строку на поле. DetailsView поддерживает редактирование и необязательно возможность перемещения по страницам, что позволяет просматривать последовательности записей. • FormView - Как и DetailsView, элемент FormView отображает по одной записи за раз, поддерживает редактирование и предоставляет элементы управления для перемещения по последовательности записей. Отличие состоит в том, что FormView основан на шаблонах, а это позволяет комбинировать поля гораздо более гибким образом, не обязательно основанным на таблице. В дополнение к перечисленным здесь элементам управления привязку данных поддерживают еще некоторые более специализированные элементы управления ASP.NET. Сюда входят Menu, TreeView и AdRotator.
  • 17. http://www.slideshare.net/IgorShkulipa 17 Кэширование Кэширование - это технология хранения в памяти копии информации, которую дорого создавать повторно. Например, можно кэшировать результаты сложного запроса, так что для повторного его выполнения вообще не потребуется обращаться к базе данных. Вместо этого соответствующий объект будет извлечен непосредственно из памяти сервера, что намного быстрее. Изящество кэширования в том. что в отличие от многих других приемов повышения производительности, оно увеличивает как производительность, так и масштабируемость. Производительность растет благодаря значительному снижению времени, необходимого на извлечение информации. Масштабируемость же становится лучше благодаря тому, что обходятся узкие места — вроде соединений с базой данных. В результате приложение может обслужить больше запросов страниц одновременно при меньшем количестве операций с базой данных.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Кэширование Среда ASP.NET поддерживает два типа кэширования. Ваши приложения могут, да и должны, использовать оба типа, т.к. они дополняют друг друга: • Кэширование вывода Это простейший тип кэширования. При этом сохраняется копия окончательно сгенерированной HTML-страницы, отправленной клиенту. Следующий клиент, который запросит эту же страницу, на самом деле не будет ожидать ее построения. Готовая HTML-разметка будет отправлена ему автоматически. Время, необходимое на выполнение кода страницы, полностью экономится. • Кэширование данных Этим кэшированием можно управлять вручную в коде. Чтобы использовать кэширование данных, вы сохраняете в кэше важные части информации, которые требуют значительного времени на повторную реконструкцию (например, объект DataSet, извлеченный из базы данных). Другие страницы могут проверить существование этой информации и пользоваться ею — таким образом, пропуская шаги, обычно подлежащие выполнению для ее получения.
  • 19. http://www.slideshare.net/IgorShkulipa 19 Кэширование На основе этих моделей построены также два специализированных типа кэширования: • Кэширование фрагментов. Это специализированный тип кэширования вывода — вместо кэширования HTML-страниц целиком оно позволяет кэшировать HTML- разметку по частям. Этот механизм работает за счет сохранения обработанного HTML-вывода для пользовательских элементов управления на странице. В следующий раз, когда выполняется данная страница, генерируются те же события (и потому код страницы будет работать по-прежнему), но код соответствующих пользовательских элементов управления уже не выполняется. • Кэширование источников данных. Это кэширование, встроенное в элементы управления источниками данных, в том числе SqlDataSource, ObjectDataSource и XmlDataSource. Формально кэширование источников данных использует кэширование данных. Отличие в том, что управлять этим процессом явно не приходится. Вместо этого нужно просто сконфигурировать соответствующие свойства, и элемент управления источником данных будет управлять процессом сохранения и извлечения из кэша.
  • 20. http://www.slideshare.net/IgorShkulipa 20 Кэширование вывода При кэшировании вывода в памяти сохраняется окончательная сгенерированная HTML-разметка страницы. Когда та же самая страница запрашивается вновь, объекты элементов управления не создаются заново, жизненный цикл страницы не запускается и ничего из вашего кода не выполняется. Вместо этого пользователю доставляется кэшированная HTML-разметка. Ясно, что кэширование вывода теоретически обеспечивает максимальный рост производительности, поскольку исключаются все накладные расходы, связанные с выполнением кода. Страница ASP.NET может использовать другие статические ресурсы (такие как изображения), которые не обрабатываются ASP.NET. Не беспокойтесь об их кэшировании. Веб-сервер IIS автоматически обрабатывает кэширование файлов наиболее эффективным из возможных способом. Декларативное кэширование вывода <%@ OutputCache Duration="20" VaryByParam="None" %>
  • 21. http://www.slideshare.net/IgorShkulipa 21 Кэширование данных Кэширование данных - наиболее гибкий тип кэширования, однако для своей реализации он требует выполнения в коде ряда дополнительных шагов. Базовый принцип кэширования данных состоит в добавлении элементов, создание которых обходится дорого, в специальный встроенный объект коллекции (называемый Cache). Этот объект доступен глобально всем запросам от всех клиентов в приложении. • Объект Cache является безопасным в отношении потоков • Элементы из кэша удаляются автоматически • Элементы кэша поддерживают зависимости Добавлять элемент в коллекцию Cache можно простым присваиванием нового имени ключа: Cache["key"] = item; Однако такой подход обычно не применяется, потому что он не позволяет получить контроль над временем нахождения объекта в кэше. Более предпочтительный подход заключается в применении метода Insert().
  • 22. http://www.slideshare.net/IgorShkulipa 22 Cache.Insert() Метод Описание Cache.Insert(key, value) Вставляет элемент в кэш под указанным ключевым именем, используя приоритет и время существования по умолчанию. Это эквивалентно применению синтаксиса коллекции на основе индекса и присваиванию нового ключевого имени Cache.Insert(key, value, dependencies) Вставляет элемент в кэш под указанным ключевым именем, используя приоритет и время существования по умолчанию. Последний параметр содержит объект CacheDependency, связанный с другими файлами или кэшируемыми элементами и позволяющий объявлять данный элемент недействительным в случае их изменения Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration) Вставляет элемент в кэш под указанным ключевым именем, используя приоритет и указанную политику устаревания (одну из двух). Эта версия метода Insert() используется наиболее часто Cache.Insert(key, value, dependencies, absoluteExpiration, slidingExpiration, priority, onRemoveCallback) Позволяет конфигурировать все аспекты политики кэширования элемента, включая время существования, зависимости и приоритет. Вдобавок можно передать делегат, указывающий на метод, который должен быть вызван при удалении элемента из кэша
  • 23. http://www.slideshare.net/IgorShkulipa 23 Приоритеты кэширования. Перечисление CachePriority Значение Описание High Эти элементы имеют минимальную вероятность удалений из кэша, когда сервер будет освобождать системную память AboveNormal Удаление этих элементов менее вероятно, чем имеющих приоритет Normal Normal Эти элементы имеют уровень приоритета по умолчанию. Они могут быть удалены только после удаления элементов с приоритетами Low и BelowNormal BelowNormal Удаление этих элементов более вероятно, чем элементов с приоритетом Normal Low Удаление из кэша элементов с этим приоритетом наиболее вероятно при очистке системной памяти сервером NotRemovable Элементы с таким приоритетом обычно не удаляются из кэша при очистке системной памяти сервером
  • 24. http://www.slideshare.net/IgorShkulipa 24 Свойства элементов управления источниками данных, связанные с кэшированием Свойство Описание EnableCaching Если равно true, то кэширование включено. Значением по умолчанию является false CacheExpirationPolicy Использует значения из перечисления DataSourceCacheExpiry: Absolute - для абсолютного устаревания (когда указывается фиксированное время нахождение объекта в кэше) или Sliding - для скользящего устаревания (когда временное окно сбрасывается при каждом извлечении объекта из кэша) CacheDuration Время в секундах нахождения объекта в кэше. Если используется скользящее устаревание, временной предел сбрасывается каждый раз, когда объект извлекается из кэша. Значение по умолчанию - 0 (или Infinite) - позволяет хранить кэшированные элементы бесконечно CacheKeyDependency и SqlCacheDependency Позволяет установить зависимость одного кэшированного элемента от другого (CacheKeyDependency) или от таблицы в базе данных (SqlCacheDependency).
  • 25. http://www.slideshare.net/IgorShkulipa 25 Пример. Default.aspx <%@ Page Title="Home Page" Language="C#“ MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WFApplication1._Default" %> <asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent"> </asp:Content> <asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent"> <div class="singlebinding"> <asp:TextBox ID="TextBox1" runat="server" Text="<%#data.TextBoxText%>"></asp:TextBox> <asp:Label ID="Label1" runat="server" Text="<%#data.LabelText%>"></asp:Label> <asp:Label ID="Label2" runat="server" Text="<%#data.GetRandom(1,10)%>"></asp:Label> <asp:Label ID="Label3" runat="server" Text="<%$Random:1,10%>"></asp:Label> </div>
  • 26. http://www.slideshare.net/IgorShkulipa 26 Пример. Default.aspx <div class="multibinding"> <asp:ListBox ID="ListBox1" runat="server" Width="100" Height="150" DataSource="<%#data.ListBoxItems%>" DataTextField="Text" DataValueField="Value" OnSelectedIndexChanged="ListBox1_SelectedIndexChanged" AutoPostBack="true" OnTextChanged="ListBox1_TextChanged"> </asp:ListBox> <asp:DetailsView ID="DetailsView1" runat="server" BorderColor="Black" BorderWidth="1" Width="350" Height="150" EmptyDataText="No data" AutoGenerateRows="false"> <Fields> <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" /> <asp:BoundField DataField="Middle" HeaderText="Middle" ReadOnly="True" SortExpression="Middle" /> <asp:BoundField DataField="Surname" HeaderText="Surname" ReadOnly="True" SortExpression="Surname" /> <asp:BoundField DataField="Birthday" HeaderText="Birthday" ReadOnly="True" SortExpression="Birthday" /> <asp:BoundField DataField="Address" HeaderText="Address" ReadOnly="True" SortExpression="Address" /> <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" SortExpression="Phone" /> <asp:BoundField DataField="Email" HeaderText="Email" ReadOnly="True“ SortExpression="Email" /> </Fields> </asp:DetailsView> </div> </asp:Content>
  • 27. http://www.slideshare.net/IgorShkulipa 27 Пример. Default.aspx.cs public class ContactClass { public int ID; public string Name { get; set; } public string Middle { get; set; } public string Surname { get; set; } public DateTime Birthday { get; set; } public string Address { get; set; } public string Phone { get; set; } public string Email { get; set; } }
  • 28. http://www.slideshare.net/IgorShkulipa 28 Пример. Default.aspx.cs public class DataForBinding { public DataForBinding() { random = new Random(); TextBoxText = "Hello, Data Binding!"; LabelText = "Random Number:"; TableItems = new List<ContactClass>(); TableItems.Add(new ContactClass { ID=1, Name = "Ivan", Middle = "Ivanovich", Surname = "Ivanov", Birthday = Convert.ToDateTime("01/01/1980"), Address = "Ivanovo, Ivanova st., 1", Phone = "+123 45 678 90 00", Email = "ivan@ivanov.com" }); TableItems.Add(new ContactClass { ID=2, Name = "Petr", Middle = "Petrovich", Surname = "Petrov", Birthday = Convert.ToDateTime("02/02/1980"), Address = "Petrovo, Petrova st., 2", Phone = "+098 76 543 21 00", Email = "petr@petrov.ua" }); TableItems.Add(new ContactClass { ID=3, Name = "Sidor", Middle = "Sidorovich", Surname = "Sidorov", Birthday = Convert.ToDateTime("03/03/1980"), Address = "Sidorovo, Sidorova st., 1", Phone = "+765 43 210 98 76", Email = "sidor@sidorov.org" }); }
  • 29. http://www.slideshare.net/IgorShkulipa 29 Пример. Default.aspx.cs public string TextBoxText { get; set; } public string LabelText { get; set; } public List<ListItem> ListBoxItems { get { var result = from c in TableItems where true select new ListItem(c.Name, c.ID.ToString()); return result.ToList<ListItem>(); } set { } } public List<ContactClass> TableItems { get; set; } public int CurrentID { get; set; } public List<ContactClass> CurrentContact { get { var result = from c in TableItems where c.ID==CurrentID select c; return result.ToList<ContactClass>(); } set { } } private Random random; public string GetRandom(int from, int to) { return random.Next(from, to).ToString(); } }
  • 30. http://www.slideshare.net/IgorShkulipa 30 Пример. Default.aspx.cs public partial class _Default : Page { protected DataForBinding data; protected void Page_Load(object sender, EventArgs e) { data = new DataForBinding(); if (!IsPostBack) { this.DataBind(); } } protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) { foreach (ListItem it in ListBox1.Items) { if (it.Selected) { data.CurrentID = Convert.ToInt32(it.Value); DetailsView1.DataSource = data.CurrentContact; DetailsView1.DataBind(); Label2.DataBind(); } } } }
  • 31. http://www.slideshare.net/IgorShkulipa 31 EditData.aspx <%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="EditData.aspx.cs" Inherits="WFApplication1.EditData" %> <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server"> </asp:Content> <asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server"> <div class="multibinding"> <asp:ListBox ID="ListBox1" runat="server" Width="100" Height="150" DataTextField="Text" DataValueField="Value" AutoPostBack="true"> </asp:ListBox> <asp:SqlDataSource ID="SqlDataSource1" runat="server“ ProviderName="System.Data.SqlClient" ConnectionString="<%$ connectionStrings:Database1Connection %>" SelectCommand="SELECT CID, CName, CMiddle, CSurname, CEmail FROM Contacts;" InsertCommand="INSERT INTO Contacts(CName, CMiddle, CSurname, CEmail) VALUES(@CName, @CMiddle, @CSurname, @CEmail)" UpdateCommand="UPDATE Contacts SET CName=@CName, CMiddle=@CMiddle, CSurname=@CSurname, CEmail=@CEmail FROM Contacts WHERE CID=@CID" DeleteCommand="DELETE FROM Contacts WHERE CID=@CID" />
  • 32. http://www.slideshare.net/IgorShkulipa 32 EditData.aspx <asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="false" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true" DataKeyNames="CID"> <Columns> <asp:BoundField DataField="CID" HeaderText="№" /> <asp:BoundField DataField="CName" HeaderText="Имя" /> <asp:BoundField DataField="CMiddle" HeaderText="Отчество" /> <asp:BoundField DataField="CSurname" HeaderText="Фамилия" /> <asp:BoundField DataField="CEmail" HeaderText="Почта" /> </Columns> </asp:GridView> </div> </asp:Content>
  • 33. http://www.slideshare.net/IgorShkulipa 33 RandomExpressionBuilder public class RandomExpressionBuilder : ExpressionBuilder { public override CodeExpression GetCodeExpression( BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context) { string[] numbers = entry.Expression.Split(','); int from = Convert.ToInt32(numbers[0]); int to = Convert.ToInt32(numbers[1]); // Получить ссылку на класс, имеющий метод GetRandom(). CodeTypeReferenceExpression typeRef = new CodeTypeReferenceExpression(this.GetType()); // Определить параметры для GetRandom(). CodeExpression[] methodParameters = new CodeExpression[2]; methodParameters[0] = new CodePrimitiveExpression(from); methodParameters[1] = new CodePrimitiveExpression(to); // Вернуть выражение привязки вызвав метод GetRandom() CodeMethodInvokeExpression methodCall = new CodeMethodInvokeExpression( typeRef, "GetRandom", methodParameters); return methodCall; } public static string GetRandom(int from, int to) { Random random = new Random(); return random.Next(from, to).ToString(); } } }
  • 34. http://www.slideshare.net/IgorShkulipa 34 Web.config <connectionStrings> <add name="DefaultConnection" providerName="System.Data.SqlClient“ connectionString="Data Source=(LocalDb)v11.0; Initial Catalog=aspnet-WFApplication1-20141024134931;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|aspnet-WFApplication1-20141024134931.mdf" /> <add name="Database1Connection" providerName="System.Data.SqlClient“ connectionString="Data Source=(LocalDb)v11.0; Initial Catalog=aspnet-WFApplication1-20141024134931; Integrated Security=SSPI; AttachDBFilename=|DataDirectory|Database1.mdf" /> </connectionStrings> ... <system.web> <compilation debug="true" targetFramework="4.5" > <expressionBuilders> <add expressionPrefix="Random“ type="WFApplication1.App_Code.RandomExpressionBuilder"/> </expressionBuilders> </compilation>
  • 39. http://www.slideshare.net/IgorShkulipa 39 Лабораторная работа № 6. Выполнить лабораторную работу №5 с использованием привязки данных. Подключить базу данных и Entity Framework.