Один атрибут | Клиент: <%# custID %> |
Заказы на сбор | <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server"> |
Выражение Контакт | <%# ( customer.FirstName + " " + customer.LastName ) %> |
Возвращаемое значение метода | Outstanding Balance: <%# GetBalance(custID) %> |
Хотя приведенный выше синтаксис похож на удобный синтаксис ASP Response.Write (<%= %>), их поведение — Но это определенно другой. Удобный синтаксис ASP Response.Write вычисляет значение во время обработки страницы, тогда как синтаксис привязки данных ASP.NET вычисляет значение только при вызове метода DataBind.
DataBind — это метод страницы и всех серверных элементов управления. Когда вы вызываете DataBind родительского элемента управления, он по очереди вызывает метод DataBind всех дочерних элементов управления. Например, DataList1.DataBind() вызовет метод DataBind всех элементов управления в шаблоне DataList. Вызов метода DataBind страницы — Page.DataBind() или просто вызов DataBind() — вызывает оценку всех выражений привязки данных на странице. Метод DataBind обычно вызывается только в событии Page_Load страницы, как показано в следующем примере.
В любом декларативном разделе страницы .aspx вы можете использовать синтаксис привязки и указать тип данных, ожидаемый средой выполнения для его оценки. Простые свойства, выражения и методы в приведенных выше примерах отображают пользователю текстовое содержимое при оценке. В этом случае значение выражения привязки данных имеет тип String. В приведенном выше примере коллекции типом значения синтаксиса привязки данных является свойство DataSource элемента управления ListBox. Вы обнаружите, что приведение типа значения в выражении привязки необходимо для получения желаемых результатов. Например, если count является целым числом:
Количество записей: <%# count.ToString() %>
Синтаксис привязки данных ASP.NET поддерживает привязку общедоступных переменных, свойств страницы и свойств других элементов управления на странице. В следующем примере показано, как выполнить привязку к общедоступным переменным и простым свойствам страницы. Обратите внимание, что эти значения были инициализированы до вызова DataBind().
<язык сценариев="VB" runat="сервер">
Sub Page_Load (отправитель как объект, e как EventArgs)
Page.DataBind
Завершить
свойство ReadOnly для субтитров custID() как строку
Получать
Вернуть "АЛФКИ"
Конец Получить
Конец свойства
ReadOnly Свойство orderCount() как целое число
Получать
Возврат 11
Конец Получить
Конечная собственность
</скрипт>
<form action="DataBind1_vb.aspx" runat="server">
Клиент: <b><%# custID %></b><br />
Открытые ордера: <b><%# orderCount %></b>
</form>
В следующем примере показано, как выполнить привязку к свойству другого элемента управления:
<asp:DropDownList id="StateList" runat="server">
<asp:ListItem>CA</asp:ListItem>
…
</asp:DropDownList>
<asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat="server"/>
Выбранное состояние: <asp:label ID="Label1" text='<%# StateList.SelectedItem.Text %>' runat="server"/>
Серверные элементы управления типа списка (такие как DropDownList, ListBox и HTMLSelect) используют коллекции в качестве источников данных. В следующем примере показано, как выполнить привязку к типу коллекции общеязыковой среды выполнения. Эти элементы управления можно привязать только к коллекциям, поддерживающим интерфейсы Ienumerable, Icollection или IlistSource. Чаще всего его можно привязать к ArrayList, Hashtable, DataView и DataReader. В следующем примере показано, как выполнить привязку к ArrayList.
Sub Page_Load (отправитель как объект, e как EventArgs)
Если не IsPostBack, тогда
Уменьшите значения как ArrayList= new ArrayList()
значения.Добавить("В")
значения.Добавить("КС")
значения.Добавить("МД")
значения.Добавить("МИ")
значения.Добавить ("ИЛИ")
значения.Добавить ("TN")
DropDown1.DataSource = значения
DropDown1.DataBind
Конец, если
End SubВ
следующем примере показано, как выполнить привязку к DataView. Обратите внимание, что класс DataView определен в пространстве имен System.Data.
Sub Page_Load (отправитель как объект, e как EventArgs)
Если не IsPostBack, тогда
Dim dt как таблица данных
Dim Dr As DataRow
Dim i As Integer
'Создать DataTable
dt = Новая таблица данных
dt.Columns.Add(New DataColumn("IntegerValue", GetType(Integer)))
dt.Columns.Add(New DataColumn("StringValue", GetType(String)))
dt.Columns.Add(New DataColumn("DateTimeValue", GetType(DateTime)))
dt.Columns.Add(New DataColumn("BooleanValue", GetType(Boolean)))
'Заполните некоторые данные
для i = от 1 до 9
др = dt.NewRow()
др(0) = я
dr(1) = "Элемент" + i.ToString()
dr(2) = DateTime.Now.ToShortTimeString
Если (i Mod 2 <> 0) Тогда
др(3) = Истина
Еще
др(3) = Ложь
Конец, если
'Добавляем строки данных в таблицу dt.Rows.Add(dr)
Следующий
GridView1.DataSource = Новый DataView(dt)
GridView1.DataBind()
Конец, если
End Sub
В следующем примере показано, как выполнить привязку к Hashtable.
Sub Page_Load (отправитель как объект, e как EventArgs)
Если не IsPostBack, тогда
Dim h As Hashtable = новая Hashtable()
h.Add («ключ1», «значение1»)
h.Add («ключ2», «значение2»)
h.Add («ключ3», «значение3»)
MyDataList.DataSource = h
MyDataList.DataBind
Конец, если
End Sub
Часто вам может потребоваться обработать данные перед привязкой к странице или элементу управления. В следующем примере показано, как выполнить привязку к выражениям и возвращаемым значениям метода.
Sub Page_Load (отправитель как объект, e как EventArgs)
Если не IsPostBack, тогда
Уменьшите значения как ArrayList = новые
значения ArrayList(). Добавить (0)
значения.Добавить (1)
значения.Добавить (2)
значения.Добавить(3)
значения.Добавить(4)
значения.Добавить(5)
значения.Добавить (6)
DataList1.DataSource = значения
DataList1.DataBind
Конец, если
Конечная
подфункция EvenOrOdd (число как целое число) как строка
Если (число Mod 2 <> 0) Тогда
Вернуть «Нечетное»
Еще
Вернуть «Четный»
Конец, если
Конечная функция
<asp:DataList id="DataList1" ……>
<Шаблон предмета>
Числовое значение: <%# Container.DataItem %>
Четный/Нечетный: <%# EvenOrOdd(Container.DataItem) %>
</ItemTemplate>
</asp:DataList>
Компонент ASP.NET Page Framework предоставляет статический метод, который оценивает выражение привязки данных с поздней привязкой и при необходимости форматирует результат в виде строки. В этом случае DataBinder.Eval удобен, поскольку устраняет большую часть работы по явному преобразованию, которую должен выполнить разработчик для преобразования оценки в желаемый тип данных. Это особенно полезно, когда в шаблонном списке есть элементы управления, привязанные к данным, поскольку в этом случае обычно необходимо преобразовать как строки данных, так и поля данных.
Взгляните на следующий пример, в котором необходимо отобразить целое число в виде строки валюты. В стандартном синтаксисе привязки данных ASP.NET необходимо сначала преобразовать тип строки данных, чтобы получить поле данных IntegerValue. Затем передайте его в качестве параметра методу String.Format.
<%# String.Format("{0:c}", (CType(Container.DataItem, DataRowView)("IntegerValue"))) %>
Этот синтаксис очень сложен и его нелегко запомнить. DataBinder.Eval, напротив, представляет собой простой метод всего с тремя параметрами: контейнером именования элемента данных, именем поля данных и строкой формата. В шаблонных элементах управления (таких как FormView, GridView, DetailsView, DataList или Повторитель) именованный контейнер — Container.DataItem. Страница — это еще один именованный контейнер, который также можно использовать для DataBinder.Eval. Как мы упоминали ранее, ASP.NET 2.0 предоставляет новый упрощенный синтаксис (Eval) для DataBinder.Eval, который можно использовать в шаблонах элементов управления с привязкой к данным для автоматического анализа Container.DataItem.
<%# DataBinder.Eval(Container.DataItem, "IntegerValue", "{0:c}") %>
<%# Eval("IntegerValue", "{0:c}") %>
Параметр строки формата является необязательным. Если этот параметр опущен, DataBinder.Eval вернет значение типа объекта, как показано ниже:
<%# CType(DataBinder.Eval(Container.DataItem, "BoolValue"), Boolean) %>
Нам следует обратить внимание на то, что , со стандартом. По сравнению с синтаксисом привязки данных, DataBinder.Eval существенно повлияет на производительность, поскольку использует отражение отложенной привязки. Пожалуйста, используйте DataBinder.Eval с умом, особенно если вам не нужно форматировать строку.