ObjectDataSource в asp.net2.0 может включать привязку элементов управления отображением данных, таких как GridView, для отображения и редактирования. Он также поддерживает встроенную разбивку по страницам, сортировку и т. д. После использования ORM вы также можете использовать ObjectDataSource.
Пейджинг здесь уже не вынимает все страницы из базы данных и затем выборочно их привязывает, а напрямую вынимает страницы в базе данных и затем привязывает их. Разница по-прежнему огромна, а эффективность значительно повышается.
Редактирование, создание и сортировка выполняются непосредственно ObjectDataSource, и нет необходимости писать какой-либо код в GridView.
Таким образом, дизайн объекта может содержать много логики, по крайней мере, для операций с базой данных, а пользовательский интерфейс будет выглядеть относительно простым. Если вы отделите его и немного откроете, для победы будет полезнее пересадить его. в будущем или превратить его в SmartClient.
Вот блог, который рассказывает лучше http://www.evosoftworks.com/Articles/wormods.aspx .
Мне довелось использовать WilsonORM, поэтому я сделал его соответствующим образом.
Основная структура такая:
Пользовательский интерфейс (GridView и другие элементы управления — элемент управления ObjectDataSource) ----〉Класс ObjectDataSource (объект, запись подкачки CRUD и другая логика) ---〉(ORM реализует CRUD) ---〉DB
состоит из нескольких основных этапов
1. Добавьте свойства и методы в объект для завершения CRUD, подкачки и другой логики.
2. Настройте элементы управления пользовательского интерфейса, такие как GridView, для подключения к элементу управления ObjectDataSource.
Давайте сначала посмотрим на первый
1. Добавьте свойства и методы к объекту для завершения CRUD, подкачки и другой логики. Класс объекта создается инструментом на основе структуры БД, а также создается файл сопоставления.
Сначала добавьте идентификационный атрибут DataObject() к объекту в пространстве имен System.ComponentModel [DataObject()].
публичный класс ProductDescription
{Во-вторых, добавьте методы CRUD в этот класс объектов.
Давайте сначала посмотрим на метод Insert
[DataObjectMethod(DataObjectMethodType.Insert)]
public static void Insert(ProductDescription ProductDescription)
{
пытаться
{
Manager.DataManager.StartTracking(productDescription, InitialState.Inserted);
Manager.DataManager.PersistChanges(productDescription);
}
поймать (Исключение ex)
{
журнал.Ошибка(ex);
}
} Этому методу должен предшествовать атрибут [DataObjectMethod(DataObjectMethodType.Insert)], указывающий, что это метод Insert;
Этот метод является статическим общедоступным методом;
Параметр является экземпляром самого объекта. Это лучше, потому что логика проста для понимания и вся работает с объектом.
Остальные методы удаления и обновления также написаны таким же образом.
Затем взгляните на метод Select, который является совершенно особенным.
Выберите метод
1 [DataObjectMethod(DataObjectMethodType.Select)]
2 публичная коллекция <ProductDescription> Retrieve (строковый запрос, int maxRows, int startRowIndex, string sortClause)
3 {
4 попробовать
5 {
6 int numPages = 0;
7 if (sortClause == null || sortClause == "")
8 sortClause = "Описание ModifiedDate";
9 Коллекция<ProductDescription> cs;
10 cs = RetievePage(query, sortClause, maxRows, (int)Math.Ceiling((double)startRowIndex/maxRows) + 1, out numPages);
11 _numRecs = ((IObjectPage)cs).TotalCount;
12 возвратных КС;
13}
14 уловов (исключение ex)
15 {
16 журнал.Ошибка(ex);
17 возвращает ноль;
18}
19}
20 [DataObjectMethod(DataObjectMethodType.Select)]
21 статическое общедоступное получение набора объектов (строковый ключ, строковое значение)
двадцать два {
23 if (Значение == null || Значение == "")
24 возвращает ноль;
25 попыток
26 {
27 Помощник QueryHelper = Manager.DataManager.QueryHelper;
28 Ключ = helper.GetFieldName(typeof(ProductDescription).ToString() + "." + Key);
29 Запрос ObjectQuery = новый ObjectQuery(typeof(ProductDescription), String.Format("{0}='{1}'", Key, Value), "");
30 ObjectSet obj = Manager.DataManager.GetObjectSet(запрос);
31 возвратный объект;
32}
33 улова (исключение ex)
34 {
35 журнал.Ошибка(ex);
36 возвращает ноль;
37 }
38 }
39
40 public int RecCount (строковый запрос, int maxRows, int startRowIndex, string sortClause)
41 {
42 вернуть _numRecs;
43}
44
45 общедоступная статическая коллекция <ProductDescription> RetrivePage (строкаwhereClause, строка sortClause, int pageSize, int pageIndex, out int pageCount)
46 {
47 Запрос ObjectQuery<ProductDescription> = новый ObjectQuery<ProductDescription>(whereClause, sortClause, pageSize, pageIndex);
48 ObjectSet<ProductDescription> pageSet = Manager.DataManager.GetObjectSet<ProductDescription>(запрос);
49 PageCount = pageSet.PageCount;
50 возвратных страниц;
51 } Первый метод — public Collection<ProductDescription> Retieve(string query, int maxRows, int startRowIndex, string sortClause), который представляет собой метод, который может реализовать встроенную разбивку по страницам и сортировку. Следует отметить, что этот код _numRecs = ((IObjectPage)cs).TotalCount; Здесь после пейджинга сразу выводится общее количество страниц. Для отображения номера страницы используется соответственно метод public int RecCount(; строковый запрос, int maxRows, int startRowIndex, string sortClause) используются для получения количества записей. Обратите внимание, что эти два метода должны соответствовать, а параметры одинаковы.
Второй метод, static public ObjectSet Retvieve(string Key, string Value), просто извлекает запись. Может использоваться при отображении DetailView/FormView.
Хотя кода кажется много, на самом деле он очень шаблонен, поэтому вы можете использовать CodeSmith или напрямую изменить инструмент ORMHelper для его динамической генерации без написания кода вручную.
С помощью этих четырех методов CRUD, разбиение по страницам и сортировка завершены. Такой объект не имеет ничего общего с пользовательским интерфейсом, а только с логикой данных.
2: Конфигурация пользовательского интерфейса. Конфигурация пользовательского интерфейса также разделена на два уровня: GridView и другие элементы управления отображением ObjectDataSource;
Теперь настройте источник данных объекта для таких элементов управления, как GridView, и напрямую подключитесь к объекту для реализации таких функций, как отображение и редактирование. Фактически, это установка свойства, связанного с ObjectDataSource.
<asp:GridView ID="gv_data" runat="server" AllowPaging="True" AllowSorting="True" DataSourceID="ods_list"
Это конфигурация элемента управления ObjectDataSource.
ИсточникДанныхОбъекта
1<asp:ObjectDataSource ID="ods_list" runat="server" DataObjectTypeName="BusinessModel.ProductDescription"
2 DeleteMethod="Удалить" OldValuesParameterFormatString="original_{0}" SelectMethod="Извлечь"
3 TypeName="BusinessModel.ProductDescription" UpdateMethod="Update" SortParameterName="sortClause"
4 MaximumRowsParameterName="maxRows" SelectCountMethod="RecCount" EnablePaging="true"
5 ConflictDetection="OverwriteChanges" ConvertNullToDBNull="false">
6 <Выбор параметров>
7 <asp:Parameter Name="query" Type="String" />
8 <asp:Parameter Name="maxRows" Type="Int32" />
9 <asp:Parameter Name="startRowIndex" Type="Int32" />
10 <asp:Parameter Name="sortClause" Type="String" />
11 </ВыбратьПараметры>
12</asp:ObjectDataSource>
Взгляните на свойства внутри: параметры для настройки метода CRUD и соответствующее имя метода. Это именно то, что мы реализуем в классе. Например, здесь настроен метод удаления: DeleteMethod="Delete"; а вот атрибут количества только что упомянутых записей: SelectCountMethod="RecCount" и сортировка и так далее.
Как передать сюда параметры? Системные атрибуты передаются системой, например, maxRows, startRowIndex и т. д., их также можно передавать с помощью кода: this.ods_list.SelectParameters["query"].DefaultValue = query