и , чтобы данные удовлетворяли требованиям броузера Internet Explorer.

Следующая разметка HTML исполняет роль шаблона, к которому с помощью ASP.NET AJAX выполняется привязка данных, получаемых из нестандартного источника данных:
vendor list goes here

Отображение данных из собственного источника данных

Для демонстрации мы сначала реализуем метод SELECT веб-службы, который, как и раньше, будет извлекать данные из таблицы Purchasing.Vendors в базе данных AdventureWorks.

Как и в предыдущих примерах, вы можете реализовать метод, возвращающий требуемые данные. С помощью атрибута [DataObjectMethod(DataObjectMethodType.Select)] вы объявляете задаваемый метод методом, выполняющим «выборку». Фактическое имя метода не имеет значения.

В качестве типа данных значения, возвращаемого методом, снова можно использовать свой собственный тип, как показано в примере 17.5.
Пример 17.5. Метод, возвращающий нестандартный тип данных ListViewVendorsDataServiceCustomType.asmx, фрагмент [DataObjectMethod(DataObjectMethodType.Select)]
public Vendor[] GetVendors( )
{
SqlConnection conn = new SqlConnection(
"server=(local)\\SQLEXPRESS; Integrated Security=true; Initial
Catalog=AdventureWorks");
conn.Open( );
SqlCommand comm = new SqlCommand(
"SELECT TOP 10 AccountNumber, Name FROM Purchasing.Vendor",
conn);
SqlDataReader dr = comm.ExecuteReader( );
List v = new List( );
while (dr.Read( ))
{
v.Add(new Vendor(
dr["AccountNumber"].ToString( ),
dr["Name"].ToString( )));
}
return v.ToArray( );
}

Как вариант, можно возвращать тип DataTable, для чего требуется меньше программного кода, как показано в примере 17.6.


Выбор этого типа возвращаемого значения требует, чтобы метод возвращал DataTable, а не DataRowCollection!
Пример 17.6. Метод, возвращающий DataTable
ListViewVendorsDataService.asmx
<%@ WebService Language="C#" Class="VendorsDataService" %>
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.SqlClient;
using Microsoft.Web.Preview.Services;using System.ComponentModel;
[WebService(Namespace = "http://hauser?wenz.de/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class VendorsDataService : DataService
{[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable GetVendors( )
{
SqlConnection conn = new SqlConnection(
"server=(local)\\SQLEXPRESS; Integrated Security=true;
InitialCatalog=AdventureWorks");
conn.Open( );
SqlCommand comm = new SqlCommand(
"SELECT TOP 10 AccountNumber, Name FROM Purchasing.Vendor",
conn);
SqlDataAdapter adap = new SqlDataAdapter(comm);
DataSet ds = new DataSet( );
adap.Fill(ds);
return ds.Tables[0];
}
}

Эти файлы не содержат методов, явно помеченных атрибутом [WebMethod].


Однако если обратиться к одной из этих веб-служб непосредственно из броузера, можно увидеть, что они имеют два метода: GetData() и SaveData(). Оба метода ожидают получить массив parameters с дополнительной информацией. Платформа ASP.NET AJAX автоматически генерирует обязательные параметры, поэтому вы просто вызываете методы с именами, зафиксированными в DataObject-MethodType – Delete, Insert, Select и Update.

На стороне ASP.NET требуется наличие разметки HTML, в которой находится определение шаблона, и разметки xml-script, обеспечивающей привязку данных. Первая составляющая – это HTML-таблица. Не забывайте использовать разделы




Account NumberName
номер счета производителя название производителя




Однако в xml?script необходимо внести некоторые изменения по сравнению с предыдущим примером.


Начинается все как обычно:


Затем следует указать ссылку на источник данных. Поскольку это необычная веб?служба, объект ScriptManager не может использоваться для ссылки на эту веб-службу. Вместо него следует использовать элемент . В этом элементе необходимо определить значения URL и идентификатора – идентификатор нам потребуется позже!


Теперь настало время элемента управления ListView и его расширения – элемента . Самый важный шаг – это привязка источника данных из предыдущего фрагмента кода к элементу управления ListView. В свойства dataPath и property должно быть записано значение data, а свойство dataContext должно ссылаться на идентификатор элемента :
targetElement="output"> (bindings)
(binding dataContext="vendorSource" dataPath="data" property="data" /)
(/bindings)
...


Элементы и остались без изменений, привязка данных выполняется к элементу и вложенным в него подэлементам.

Однако мы упустили одну вещь.


Данные мы привязали, но еще не загрузили. Источник данных поддерживает свойство с именем autoLoad. Если этому свойству присвоить значение true, метод Select источника данных будет вызван автоматически.

В примере 17.7 приводится полный код, решающий эту задачу.
Пример 17.7. Отображение данных, полученных из нестандартного
источника данных
ListViewDataService.aspx
<%@ Page Language="C#" %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1?transitional.dtd"> ASP.NET AJAX

(body)
(asp:ScriptManager runat="server")

(asp:ScriptReference Name="PreviewScript.js"
Assembly="Microsoft.Web.Preview" /)

(/asp:ScriptManager)
здесь будет выводиться список производителей





Account NumberName
номер счета поставщика название поставщика





(/body)


Нам удалось избежать необходимости писать программный код (исключение составляет класс DataService веб-службы) и обойтись одними декларациями.


Этот пример выводит первые 10 записей из таблицы Purchasing.Vendors в виде HTML-элемента .

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела ASP.NET AJAX на эту тему:
Использование элемента управления ListView
Привязка данных к HTML-таблице
Привязка данных к элементу управления ListView
Создание собственного источника данных