Создание исходного объекта элемента управления ObjectDataSource
Обновлен: Ноябрь 2007
Исходный объект для элемента управления ObjectDataSource извлекает данные и выполняет обновления в базовом источнике данных в соответствии с запросом элемента управления ObjectDataSource. Исходный объект для элемента управления ObjectDataSource может быть любым классом, экземпляр которого может быть создан элементом управления ObjectDataSource, или классом, предоставляющим общие методы static (Shared в Microsoft Visual Basic), которые могут быть вызваны элементом управления ObjectDataSource.
Пример исходного объекта и страницы ASP.NET, содержащей элемент ObjectDataSource, который использует этот исходный объект, см. в разделе Пример объекта источника ObjectDataSource или Пример строго типизированного исходного объекта ObjectDataSource.
Создание объектов
Элемент управления ObjectDataSource в области действия одного запроса создает экземпляр исходного объекта, вызывает указанный метод и удаляет этот экземпляр объекта, если объект имеет методы экземпляра вместо методов static (Shared в Visual Basic). Следовательно, этот объект не имеет сведений о состоянии. Таким образом объект должен получить и освободить все необходимые ресурсы в диапазоне одного запроса.
Можно управлять созданием исходного объекта путем обработки события ObjectCreating элемента управления ObjectDataSource. Можно создать экземпляр исходного объекта, а затем установить этот экземпляр в качестве значения свойства ObjectInstance класса ObjectDataSourceEventArgs. Элемент управления ObjectDataSource будет использовать экземпляр, создаваемый в событии ObjectCreating, вместо создания собственного экземпляра.
Задание конструктора класса
Если исходный объект элемента управления ObjectDataSource предоставляет общие методы static (Shared в Visual Basic), которые могут вызываться для извлечения и изменения данных, то элемент управления ObjectDataSource будет вызывать эти методы напрямую. Если элемент управления ObjectDataSource должен создать для вызова метода экземпляр исходного объекта, то объект должен включать открытый конструктор, не принимающий параметров. Элемент управления ObjectDataSource будет вызывать этот конструктор при создании нового экземпляра исходного объекта.
Если исходный объект не содержит открытый конструктор без параметров, можно создать экземпляр исходного объекта, который будет использоваться элементом управления ObjectDataSource в событии ObjectCreating, как описано в предыдущем разделе «Создание объекта».
Задание методов объекта
Исходный объект элемента управления ObjectDataSource может содержать любое число методов, которые используются для выборки, вставки, обновления или удаления данных. Эти методы вызываются с помощью элемента управления ObjectDataSource на основе имени метода, определяемого с помощью свойства SelectMethod, InsertMethod, UpdateMethod или DeleteMethod элемента управления ObjectDataSource и имен параметров в коллекции связанных параметров для выбранного действия. Подробные сведения см. в разделе Использование параметров для элемента управления ObjectDataSource.
Исходный объект может также содержать дополнительный методSelectCount , который идентифицируется элементом управления ObjectDataSource при помощи свойства SelectCountMethod, которое возвращает общее число объектов в источнике данных. Элемент управления ObjectDataSource будет вызывать метод SelectCount после вызова метода Select, извлекающего общее число записей в источнике данных для использования при разбиении по страницам.
![]() |
---|
Настоятельно рекомендуется реализовать метод SelectCount, если объект поддерживает разбиение по страницам. Это уменьшит количество записей, которые должен запросить элемент управления с привязкой к данным, например GridView, для извлечения страницы данных. Если общее количество строк предоставляется объектом источника данных, элемент управления с привязкой к данным будет запрашивать только по одной странице строк за один раз. Если общее количество строк не указано, элемент управления с привязкой к данным должен запросить все строки из источника данных (начиная с первой строки запрошенной страницы данных) и отменить все строки, которые отсутствуют в текущей странице. |
Работа со строго типизированными объектами
Исходный объект может возвращать и получать строго типизированные объекты на основе данных из источника данных. Элемент управления ObjectDataSource определяет тип этих объектов с помощью свойства DataObjectTypeName. В этом сценарии вместо передачи методу одного или нескольких параметров передается один объект, объединяющий все значения параметров. Дополнительные сведения о передаче конкретного типа объекта в качестве параметра в метод исходного объекта см. в разделе Использование параметров для элемента управления ObjectDataSource.
Если свойству ConflictDetection элемента управления ObjectDataSource присвоено значение CompareAllValues, а свойству OldValuesParameterFormatString присвоено значение, которое отличает параметры для исходных значений от параметров для текущих значений, то элемент управления ObjectDataSource будет выполнять следующие действия:
Вызовет метод Update из исходного объекта, который принимает параметры как для текущих, так и для исходных значений.
Вызовет метод Delete из исходного объекта, который принимает параметры для исходных значений.
При использовании строго типизированного объекта элемент управления ObjectDataSource будет вызывать метод Update из исходного объекта, который принимает как объект со строгим типом, заполняемый текущими значениями, так и объект со строгим типом, заполняемый исходными значениями. Однако когда элемент управления ObjectDataSource вызывает метод Delete и передает объект со строгим типом, он вызывает метод, который принимает объект со строгим типом в качестве параметра, независимо от параметра ConflictDetection или OldValuesParameterFormatString. Если свойство ConflictDetection имеет значение OverwriteChanges, то объект, передаваемый методу Delete, заполняется только текущими значениями первичного ключа (другие свойства объекта имеют значение null). Если свойство ConflictDetection имеет значение CompareAllValues, то объект, передаваемый методу Delete, заполняется исходными значениями первичного ключа и исходными значениями для остальных свойств объекта.
Работа с конструкторами
При необходимости можно применить к исходному объекту атрибуты, описывающие его для конструктора, например для средства разработки Microsoft Visual Web Developer, как объект данных. Это может улучшить производительность разработчиков, применяющих конструктор, чтобы специально определить, какие методы объекта используются для операций выборки, вставки, обновления и удаления.
Чтобы определить объект как исходный объект для элемента управления ObjectDataSource, следует использовать атрибут DataObjectAttribute, как показано в следующем примере:
<DataObject(True)> _
Public Class NorthwindEmployee
[DataObject(true)]
public class NorthwindEmployee
Чтобы определить метод в качестве метода объекта данных, следует использовать атрибут DataObjectMethodAttribute. Если применяется атрибут DataObjectMethodAttribute, следует включить одно из значений DataObjectMethodType перечисления для определения типа метода (выбор, вставка, обновление или удаление). В следующем примере кода атрибут DataObjectMethodAttribute используется для идентификации метода как метода Delete:
<DataObjectMethod(DataObjectMethodType.Delete)> _
Public Shared Function DeleteEmployee(EmployeeID As Integer) As Boolean
If Not _initialized Then Initialize()
Dim conn As SqlConnection = New SqlConnection(_connectionString)
Dim cmd As SqlCommand = New SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn)
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID
Try
conn.Open()
If cmd.ExecuteNonQuery() <> 0 Then _
Return False
Catch e As SqlException
' Handle exception.
Finally
conn.Close()
End Try
Return True
End Function
[DataObjectMethod(DataObjectMethodType.Delete)]
public static bool DeleteEmployee(int EmployeeID)
{
if (!_initialized) { Initialize(); }
SqlConnection conn = new SqlConnection(_connectionString);
SqlCommand cmd = new SqlCommand("DELETE FROM Employees WHERE EmployeeID = @EmployeeID", conn);
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = EmployeeID;
try
{
conn.Open();
if (cmd.ExecuteNonQuery() == 0)
return false;
}
catch (SqlException e)
{
// Handle exception.
}
finally
{
conn.Close();
}
return true;
}
См. также
Основные понятия
Пример объекта источника ObjectDataSource
Использование параметров для элемента управления ObjectDataSource
Ссылки
Общие сведения о серверном веб-элементе управления ObjectDataSource