Опубликован: 07.05.2010 | Доступ: свободный | Студентов: 1678 / 62 | Оценка: 4.56 / 4.06 | Длительность: 34:11:00
Лекция 13:

Привязка данных ADO.NET

Аннотация: Привязка одного значения. Привязка множественного значения к списковым элементам управления. Привязка DataReader к списковым элементам управления. Элемент управления GridView с множественной привязкой данных. Элементы управления источниками данных. Элемент управления SqlDataSource. Передача параметра источнику данных через элемент управления. Передача параметра источнику данных через строку запроса. Передача параметра источнику данных в хранимых процедурах. Обработка исключений источников данных. Редактирование записей в источнике данных. Обновление данных при параллельном доступе. Компонент управления источником данных ObjectDataSource. Применение перегруженного метода UpdateEmployee().Использование ObjectDataSource для вставки и удаления записей. Программное изменение запроса пользователя в SqlDataSource.
Ключевые слова: Web, приложение, отображение, привязка данных, этапы проектирования, связь, извлечение данных, источник данных, место, выражение, дескриптор, e-form, условные операторы, арифметическое выражение, PHP, исполнение, requester, browser, variability, radius, CoS, alpha, ПО, значение, IMG, script, элементы управления, HTML-код, переключатель, маркированный список, WebControl, DataSource, альтернатива, очередь, класс, Hashtable, hashing, интерфейс, collection, genericity, literal, www-броузер, двойной щелчок, элемент списка, свойства списков, серверные элементы управления, ICollection, ArrayList, dictionary, SQL-запрос, базы данных, список, ANN, визуализация, GridView, DetailsView, FormView, Menu, TreeView, AdRotator, FirstName, LastName, title, insider, coordinate, ObjectDataSource, SqlDataSource, SiteMapDataSource, компонент, поставщик данных, commonality, ODBC, строка соединения, встроенный SQL, хранимая процедура, меню, Button, соединение с базой данных, выборка данных, кэширование данных, DataSet, кэширование, память, параметризованная команда, выборка, команда, параметр, AutoPostBack, константы, Command, PARAMETER, cookie, profiler, session.name, передача параметров, строка запроса, злоумышленник, программный способ, тип команды, распознавание, сервер баз данных, insertion, доступ, удаление записей, исключение, labels, дополнительный код, операции с данными, поле, объект, управление данными, column, диалоговое окно, auto-id, generation, field, DataField, cancellation, оболочка, сервер, сетевые приложения, сохранение изменений, запись, префикс, originate, конфликт, путь, конструктор, метод экземпляра, IENumerable, Пользовательские компоненты, пользователь, Filtered, ing, протоколирование, пользовательский объект, EMP, row, 'widths', пиксел, формальный параметр, перегрузка, регистр, формальный аргумент, 1-разбор, неопределенное значение, пользовательский тип, ASP, канал передачи данных, передача данных, перегруженный метод, configure, Data Source, гиперссылка, Дополнение, операции, параметр команды, конфигурирование, реляционная база данных, первичный ключ, ключевое поле

Программировать стараться - с конкурентами распрощаться

Файлы к лекции Вы можете скачать здесь.

Профессиональное Web-приложение всегда имеет дело с данными, которые могут храниться в базе данных, XML- или структурированном файле, или где-то еще. Правильное отображение этих данных на странице пользователя так же важно, как и их извлечение. ADO.NET имеет механизм привязки данных, который позволяет декларативно (на этапе проектирования) определить связь между элементами извлечения данных и элементами их отображения. При этом может не потребоваться ни строчки кода.

Привязка данных - это средство, которое позволяет ассоциировать источник данных с элементом управления с целью автоматического отображения данных в этом элементе управления. Различают привязку одного значения и привязку множественного значения.

Привязка одного значения

Привязка одного значения позволяет связать свойство элемента управления с местом на странице. Это место называется вычислимым выражением привязки данных. Различают вычислимые # - выражения и более общие $ - выражения привязки данных. Выражение привязки данных может располагаться как внутри дескрипторов элементов управления, так и самостоятельно в любом месте страницы, даже вне дескриптора <form>...</form>.

Выражение привязки данных не может содержать конструкций языка (циклы, условные операторы, объявления и т.д.). Оно может только содержать:

  • значение свойства
  • значение, возвращаемое функцией
  • переменную-член класса
  • ссылку на свойство другого элемента управления
  • арифметическое выражение с применением литералов и переменных
  • и т.д.

Выражение привязки данных в ASP.NET помещается в ограничительные скобки <%#...%>PHP это будут скобки <?php...?> или <?=...?> ). Если выражение привязки данных используется внутри дескриптора элемента управления в качестве вычисляемого значения атрибута, то оно помещается в одинарные или двойные кавычки. Исполнение выражения привязки данных требует обязательного выполнения метода Page.DataBind() в сценарии страницы. Если мы забудем это сделать, то выражение привязки данных будет проигнорировано в HTML-выводе страницы.

Пример корректных # - выражений привязки данных:

  • <%# Request.Browser.Browser %>
  • <%# GetUserName(ID) %>
  • <%# variable %>
  • <%# "Дорогой " + "друг " + name %>
  • <%# 2 * PI * radius + cos(alpha) %>

Пример интерфейсной части страницы, использующей несколько выражений привязки данных:

<html>
<body>
<form method="post" runat="server">
	<asp:Image ID="Image1" runat="server" ImageUrl='<%# FilePath %>' /><br />
	<asp:Label ID="Label1" runat="server" Text="<%# FilePath %>" /><br />
	<asp:TextBox ID="TextBox1" runat="server" Text='<%# GetFilePath() %>' /><br />
	<asp:HyperLink ID="HyperLink1" runat="server"
		NavigateUrl="<%# LogoPath.Value %>" Font-Bold="true" Text="Show logo" /><br />
	<input type="hidden" ID="LogoPath" runat="server" value="MyMy.png">
		<b><%# FilePath %></b><br />
	<img src="<%# GetFilePath() %>">
</form>
</body>
</html>

В приведенном коде выражение привязки данных используется не только для динамической смены значений свойств элементов управления, но и строковых значений переменных. И еще разок, чтобы выражения не были отброшены системой, не забыть бы выполнить метод DataBind() страницы.

Приведем простой пример.

  • Создайте новый сайт с именем WebSite9 командой File/New/Web Site (шаблон ASP.NET Web Site )
  • Скопируйте из проекта WebSite8 файл Web.Config, который должен иметь такой вид
    <?xml version="1.0"?>
    <configuration>
    	<connectionStrings>
    		<add name="Northwind" connectionString=
    		    "Data Source=localhost; Initial Catalog=Northwind; user id=sa; password=;" />
    	</connectionStrings>
    	<system.web>
    		<compilation debug="true"/>
    	</system.web>
    </configuration>
  • Добавьте к приложению новую страницу с совмещенным кодом и именем SingleValueBinding.aspx, назначьте страницу стартовой
  • Вызовите для корня Web-дерева контекстное меню и создайте каталог Pictures сайта командой New Folder
  • Скопируйте из каталога Pictures данной работы в каталог Pictures сайта два файла: MyPhoto.jpg и MyMy.png (или любые другие рисунки)
  • Наполните страницу SingleValueBinding.aspx следующим кодом
    <%@ Page Language="C#" %>
        
    <script runat="server">
        // Объявления переменных класса
        string cat = "Васька", photo;
        
        // Методы
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                Label1.Text = "<h1>Заполните поля и пошлите запрос</h1>";
                pict.Src = "Pictures/MyPhoto.jpg";
            }
            else
            {
                Label1.Text = "<h1>Вот Вам такие ответы</h1>";
                photo = "Pictures/MyMy.png";
                pict.Border = 3;
            }
        }
        
        public int AddFun(string a, string b)
        {
            try
            {
                return Convert.ToInt32(a) + Convert.ToInt32(b);
            }
            catch
            {
                Label1.Text = "<h1 style='color:red'>В поля вводите целые числа</h1>";
                Label1.Text += "<hr style='height:10; color:red' />";
                return 0;
            }
        }
        
        protected void Button1_Click(object sender, EventArgs e)
        {
            this.DataBind();
        }
    </script>
        
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Выражения привязки одного значения</title>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Label ID="Label1" runat="server" Text="Label" />
                <h2>
                    Кто сказал Мяу...?</h2>
                <b style="color: Red">
                    <%# "Кот " + cat + "!" %>
                </b>
                <h2>
                    Сколько будет дважды-два?</h2>
                <b style="color: Red">
                    <%# 2 * 2 %>
                </b>
                <h2>
                    Введите два <em>целых</em> числа<br />
                    и получите их сумму</h2>
                <asp:TextBox ID="TextBox1" runat="server" />
                +
                <asp:TextBox ID="TextBox2" runat="server" />
                = <b style="color: Red">
                    <%# AddFun(TextBox1.Text, TextBox2.Text) %></b>
                    <h2>Кто здесь изображен?</h2>
                    <img id="pict" runat="server" src="<%# photo %>" />
                <br />
                <br />
                <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Выполнить" />
            </div>
        </form>
    </body>
    </html>

При первой загрузке страницы в текстовую метку выводится начальный заголовок <h1> и установленное по умолчанию значение свойства src дескриптора <img>. Все выражения привязки данных при этом игнорируются. При обратной отсылке, инициированной кнопкой, срабатывает метод DataBind() страницы. Он заставляет выполниться все выражения привязки данных, код получения которых размещен в блоке сценариев <script>.

  • Выполните страницу SingleValueBinding.aspx и убедитесь в работоспособности выражений привязки данных

Результат при начальной загрузке страницы:


Результат после обратной отсылки страницы: